// ENVIRONMENT require("dotenv").config(); // DATABASE const { PrismaClient : CMSClient } = require("../../prisma/clients/cms"); const prisma = new CMSClient(); const { v4: uuidv4 } = require("uuid"); const jwt = require("jsonwebtoken"); const argon2 = require("argon2"); const { localTime } = require("../services/time.services.js"); // CONSTANTS const { successResponse } = require("../res/responses.js"); const { errorResponse } = require("../res/responses.js"); const { notFoundResponse } = require("../res/responses.js"); const { badRequestResponse } = require("../res/responses.js"); // ENV const { JWT_SECRET_KEY } = process.env; // CONTROLLERS exports.adminLogin = async (req, res) => { try { const { email, password } = req.body; if (!email || !password) { return badRequestResponse( res, "Email and password are required", "Missing credentials" ); } const admin = await prisma.adminAccount.findFirst({ where: { Email_AA: email, }, }); if (!admin) { return notFoundResponse(res, "Admin not found!"); } if (await argon2.verify(admin.Password_AA, req.body.password)) { const accessToken = jwt.sign({ userID: admin.UUID_AA }, JWT_SECRET_KEY, { expiresIn: "1d", }); await prisma.adminAccount.update({ where: { UUID_AA: admin.UUID_AA, }, data: { UpdatedAt_AA: localTime(new Date()), LastLogin_AA: localTime(new Date()), }, }); return successResponse(res, "Authenticated!", { admin: { id: admin.UUID_AA, name: admin.Username_AA, email: admin.Email_AA, }, token: accessToken, }); } else { return errorResponse(res, "Invalid email or password!"); } } catch (err) { return notFoundResponse(res, "Admin account not found", err); } }; exports.adminRegister = async (req, res) => { try { const { username, email, password } = req.body; if (!username || !email || !password) { return badRequestResponse( res, "Username, email, and password are required", "Missing fields" ); } const hashedPassword = await argon2.hash(password); const newAdmin = await prisma.adminAccount.create({ data: { UUID_AA: uuidv4(), Username_AA: username, Email_AA: email, Password_AA: hashedPassword, CreatedAt_AA: localTime(new Date()), }, }); return successResponse(res, "Admin registered successfully!", { admin: { id: newAdmin.UUID_AA, name: newAdmin.Username_AA, email: newAdmin.Email_AA, }, }); } catch (err) { return errorResponse(res, "Error registering admin", err); } };