From b83d35393f6219b086240fd1049f7b58771a35a5 Mon Sep 17 00:00:00 2001 From: om-dev007 Date: Tue, 23 Jun 2026 18:44:55 +0530 Subject: [PATCH] fix: add error handling to authentication controllers --- backend/src/controllers/authController.ts | 133 +++++++++++++--------- 1 file changed, 78 insertions(+), 55 deletions(-) diff --git a/backend/src/controllers/authController.ts b/backend/src/controllers/authController.ts index c91b8d0..92efd94 100644 --- a/backend/src/controllers/authController.ts +++ b/backend/src/controllers/authController.ts @@ -15,46 +15,56 @@ const generateToken = (id: string) => { // @route POST /api/users // @access Public export const registerUser = async (req: Request, res: Response) => { - const { name, email, password } = req.body; + try { + const { name, email, password } = req.body; - if (!name || !email || !password) { - res.status(400).json({ message: 'Please add all fields' }); - return; - } + if (!name || !email || !password) { + res.status(400).json({ message: 'Please add all fields' }); + return; + } - const userExists = await prisma.user.findUnique({ where: { email } }); + const userExists = await prisma.user.findUnique({ where: { email } }); - if (userExists) { - res.status(400).json({ message: 'User already exists' }); - return; - } + if (userExists) { + res.status(400).json({ message: 'User already exists' }); + return; + } - const salt = await bcrypt.genSalt(10); - const hashedPassword = await bcrypt.hash(password, salt); + const salt = await bcrypt.genSalt(10); + const hashedPassword = await bcrypt.hash(password, salt); - const user = await prisma.user.create({ - data: { - name, - email, - password: hashedPassword + const user = await prisma.user.create({ + data: { + name, + email, + password: hashedPassword + } + }); + + if (user) { + res.status(201).json({ + _id: user.id, + name: user.name, + email: user.email, + role: user.role, + token: generateToken(user.id), + xp_points: user.xp_points, + streak_days: user.streak_days, + solvedProblems: user.solvedProblems, + bookmarks: user.bookmarks, + activityLog: user.activityLog + }); + } else { + res.status(400).json({ message: 'Invalid user data' }); } - }); + } + catch (error: any) { + console.error('Register Error:', error); - if (user) { - res.status(201).json({ - _id: user.id, - name: user.name, - email: user.email, - role: user.role, - token: generateToken(user.id), - xp_points: user.xp_points, - streak_days: user.streak_days, - solvedProblems: user.solvedProblems, - bookmarks: user.bookmarks, - activityLog: user.activityLog + res.status(500).json({ + success: false, + message: error.message ||'Internal server error' }); - } else { - res.status(400).json({ message: 'Invalid user data' }); } }; @@ -62,29 +72,38 @@ export const registerUser = async (req: Request, res: Response) => { // @route POST /api/users/login // @access Public export const loginUser = async (req: Request, res: Response) => { - const { email, password } = req.body; + try { + const { email, password } = req.body; - const user = await prisma.user.findUnique({ where: { email } }); + const user = await prisma.user.findUnique({ where: { email } }); - if (user && user.password && (await bcrypt.compare(password, user.password))) { - if (user.isBanned) { - res.status(403).json({ message: 'Your account has been suspended' }); - return; + if (user && user.password && (await bcrypt.compare(password, user.password))) { + if (user.isBanned) { + res.status(403).json({ message: 'Your account has been suspended' }); + return; + } + res.json({ + _id: user.id, + name: user.name, + email: user.email, + role: user.role, + token: generateToken(user.id), + xp_points: user.xp_points, + streak_days: user.streak_days, + solvedProblems: user.solvedProblems, + bookmarks: user.bookmarks, + activityLog: user.activityLog + }); + } else { + res.status(400).json({ message: 'Invalid credentials' }); } - res.json({ - _id: user.id, - name: user.name, - email: user.email, - role: user.role, - token: generateToken(user.id), - xp_points: user.xp_points, - streak_days: user.streak_days, - solvedProblems: user.solvedProblems, - bookmarks: user.bookmarks, - activityLog: user.activityLog + } catch (error: any) { + console.error('Login Error:', error); + + res.status(500).json({ + success: false, + message: error.message || 'Internal server error' }); - } else { - res.status(400).json({ message: 'Invalid credentials' }); } }; @@ -147,9 +166,13 @@ export const googleAuth = async (req: Request, res: Response) => { }); } catch (error) { - console.error(error); - res.status(400).json({ message: 'Google Auth Failed' }); - } + console.error('Google Auth Error:', error); + + res.status(500).json({ + success: false, + message: 'Google authentication failed' + }); +} }; // @desc Get user data @@ -157,4 +180,4 @@ export const googleAuth = async (req: Request, res: Response) => { // @access Private export const getMe = async (req: Request, res: Response) => { res.status(200).json(req.user); -}; +}; \ No newline at end of file