import prisma from "../prisma/client.js"; import {generateToken} from "../utils/jwt.js"; import {hashPassword, comparePassword} from "../utils/password.js"; /** * REGISTER * POST /api/auth/register */ export async function register(req, res) { const {username, password, role} = req.body; if (!username || !password) { return res.status(400).json({error: "Username and password required"}); } const existingUser = await prisma.user.findUnique({ where: {username}, }); if (existingUser) { return res.status(409).json({error: "Username already exists"}); } const hashedPassword = await hashPassword(password); const user = await prisma.user.create({ data: { username, password: hashedPassword, role: role || "admin", }, }); res.status(201).json({ message: "User registered successfully", user: { id: user.id, username: user.username, role: user.role, }, }); } /** * LOGIN * POST /api/auth/login */ export async function login(req, res) { const {username, password} = req.body; if (!username || !password) { return res.status(400).json({error: "Username and password required"}); } const user = await prisma.user.findUnique({ where: {username}, }); if (!user) { return res.status(401).json({error: "Invalid credentials"}); } const isValid = await comparePassword(password, user.password); if (!isValid) { return res.status(401).json({error: "Invalid credentials"}); } const token = generateToken({ userId: user.id, username: user.username, role: user.role, }); res.json({token}); }