Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
133 changes: 78 additions & 55 deletions backend/src/controllers/authController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,76 +15,95 @@ 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'
});
Comment thread
om-dev007 marked this conversation as resolved.
} else {
res.status(400).json({ message: 'Invalid user data' });
}
};

// @desc Authenticate a user
// @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: 'Internal server error'
});
} else {
res.status(400).json({ message: 'Invalid credentials' });
}
};

Expand Down Expand Up @@ -147,14 +166,18 @@ 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
// @route GET /api/users/me
// @access Private
export const getMe = async (req: Request, res: Response) => {
res.status(200).json(req.user);
};
};
Loading