From 64d720143e923e36001f35920953ea22bf058dc3 Mon Sep 17 00:00:00 2001 From: Kailasdevdas Date: Tue, 21 Apr 2026 11:50:48 +0530 Subject: [PATCH 1/2] feat: add create user script --- backend/package.json | 3 +- backend/src/routes/auth.routes.js | 3 +- backend/src/utils/createUser.js | 47 +++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 backend/src/utils/createUser.js diff --git a/backend/package.json b/backend/package.json index d208b7c..65be22f 100644 --- a/backend/package.json +++ b/backend/package.json @@ -8,7 +8,8 @@ "start": "node src/app.js", "prisma": "prisma", "migrate": "npx prisma migrate dev", - "generate": "npx prisma generate" + "generate": "npx prisma generate", + "create-user": "node src/utils/createUser.js" }, "keywords": [], "author": "", diff --git a/backend/src/routes/auth.routes.js b/backend/src/routes/auth.routes.js index a121aeb..6477ea9 100644 --- a/backend/src/routes/auth.routes.js +++ b/backend/src/routes/auth.routes.js @@ -1,9 +1,8 @@ import express from "express"; -import {register, login} from "../controllers/auth.controller.js"; +import { login } from "../controllers/auth.controller.js"; const router = express.Router(); -router.post("/register", register); router.post("/login", login); export default router; diff --git a/backend/src/utils/createUser.js b/backend/src/utils/createUser.js new file mode 100644 index 0000000..91f4d6c --- /dev/null +++ b/backend/src/utils/createUser.js @@ -0,0 +1,47 @@ +import prisma from "../prisma/client.js"; +import { hashPassword } from "./password.js"; +async function main() { + const username = process.argv[2]; + const password = process.argv[3]; + const role = process.argv[4] || "admin"; + + if (!username || !password) { + console.log( + "Usage: node scripts/createUser.js [role]", + ); + process.exit(1); + } + + const existingUser = await prisma.user.findUnique({ + where: { username }, + }); + + if (existingUser) { + console.log("User already exists"); + process.exit(1); + } + + const hashedPassword = await hashPassword(password); + + const user = await prisma.user.create({ + data: { + username, + password: hashedPassword, + role, + }, + }); + + console.log("User created:", { + id: user.id, + username: user.username, + role: user.role, + }); +} + +main() + .catch((e) => { + console.error(e); + }) + .finally(async () => { + await prisma.$disconnect(); + }); -- 2.43.0 From dd5d46c58dcb5736ea0941865cbd961bb5de8ef3 Mon Sep 17 00:00:00 2001 From: Kailasdevdas Date: Tue, 21 Apr 2026 11:51:14 +0530 Subject: [PATCH 2/2] feat: update favicon and title --- frontend/index.html | 20 ++++++++++---------- frontend/public/favicon.ico | Bin 0 -> 15406 bytes frontend/public/vite.svg | 1 - 3 files changed, 10 insertions(+), 11 deletions(-) create mode 100644 frontend/public/favicon.ico delete mode 100644 frontend/public/vite.svg diff --git a/frontend/index.html b/frontend/index.html index 072a57e..60abd0c 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -1,13 +1,13 @@ - - - - - frontend - - -
- - + + + + + GG Admin Dashboard + + +
+ + diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..509fd119e2279210ce240aa9dde71df5ffeb6e0f GIT binary patch literal 15406 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