import express from 'express'; import jwt from 'jsonwebtoken'; import User from '../models/User.js'; const router = express.Router(); // Register router.post('/register', async (req, res) => { try { const { username, email, password } = req.body; // Validation if (!username || !email || !password) { return res.status(400).json({ message: 'Username, email, and password are required' }); } if (password.length < 6) { return res.status(400).json({ message: 'Password must be at least 6 characters long' }); } // Check if user already exists const existingUser = await User.findOne({ $or: [{ email }, { username }] }); if (existingUser) { return res.status(400).json({ message: 'User with this email or username already exists' }); } // Create new user const user = new User({ username, email, password }); await user.save(); // Generate JWT token const token = jwt.sign( { userId: user._id }, process.env.JWT_SECRET, { expiresIn: '7d' } ); res.status(201).json({ message: 'User created successfully', token, user: { id: user._id, username: user.username, email: user.email } }); } catch (error) { console.error('Registration error:', error); res.status(500).json({ message: 'Server error', error: error.message }); } }); // Login router.post('/login', async (req, res) => { try { const { email, password } = req.body; // Find user by email const user = await User.findOne({ email }); if (!user) { return res.status(400).json({ message: 'Invalid credentials' }); } // Check password const isMatch = await user.comparePassword(password); if (!isMatch) { return res.status(400).json({ message: 'Invalid credentials' }); } // Generate JWT token const token = jwt.sign( { userId: user._id }, process.env.JWT_SECRET, { expiresIn: '7d' } ); res.json({ message: 'Login successful', token, user: { id: user._id, username: user.username, email: user.email } }); } catch (error) { res.status(500).json({ message: 'Server error', error: error.message }); } }); export default router;