import express from 'express'; import bcrypt from 'bcryptjs'; import jwt from 'jsonwebtoken'; import db from '../database/db.js'; const router = express.Router(); const JWT_SECRET = process.env.JWT_SECRET || 'your-secret-key-change-in-production'; // Login router.post('/login', async (req, res) => { try { const { email, password } = req.body; if (!email || !password) { return res.status(400).json({ error: 'Email and password required' }); } const user = await db.getAsync('SELECT * FROM users WHERE email = ?', email); if (!user) { return res.status(401).json({ error: 'Invalid email or password' }); } const isValid = await bcrypt.compare(password, user.password_hash); if (!isValid) { return res.status(401).json({ error: 'Invalid email or password' }); } const token = jwt.sign( { id: user.id, email: user.email, role: user.role }, JWT_SECRET, { expiresIn: '24h' } ); res.json({ token, user: { id: user.id, name: user.name, email: user.email, role: user.role } }); } catch (error) { console.error('Login error:', error); res.status(500).json({ error: 'Internal server error' }); } }); // Get current user router.get('/me', async (req, res) => { try { const authHeader = req.headers['authorization']; const token = authHeader && authHeader.split(' ')[1]; if (!token) { return res.status(401).json({ error: 'No token provided' }); } const decoded = jwt.verify(token, JWT_SECRET); const user = await db.getAsync('SELECT id, email, name, role FROM users WHERE id = ?', decoded.id); if (!user) { return res.status(404).json({ error: 'User not found' }); } res.json({ user }); } catch (error) { res.status(401).json({ error: 'Invalid token' }); } }); export default router;