import { User, Role } from '../models/index.js'; import bcrypt from 'bcrypt'; import jwt from 'jsonwebtoken'; import dotenv from 'dotenv'; dotenv.config(); export default { async create(req, res) { try { const { password, ...rest } = req.body; const password_hash = await bcrypt.hash(password, 10); const user = await User.create({ ...rest, password_hash }); res.status(201).json(user); } catch (err) { res.status(400).json({ error: err.message }); } }, async getAll(req, res) { try { const users = await User.findAll({ include: Role }); res.json(users); } catch (err) { res.status(500).json({ error: err.message }); } }, async getById(req, res) { try { const user = await User.findByPk(req.params.id, { include: Role }); if (!user) return res.status(404).json({ error: 'User not found' }); res.json(user); } catch (err) { res.status(500).json({ error: err.message }); } }, async update(req, res) { try { const user = await User.findByPk(req.params.id); if (!user) return res.status(404).json({ error: 'User not found' }); const { password, ...rest } = req.body; if (password) { rest.password_hash = await bcrypt.hash(password, 10); } await user.update(rest); res.json(user); } catch (err) { res.status(400).json({ error: err.message }); } }, async delete(req, res) { try { const user = await User.findByPk(req.params.id); if (!user) return res.status(404).json({ error: 'User not found' }); await user.destroy(); res.json({ message: 'User deleted' }); } catch (err) { res.status(500).json({ error: err.message }); } }, async login(req, res) { try { const { email, password } = req.body; const user = await User.findOne({ where: { email } }); if (!user) return res.status(401).json({ error: 'Invalid credentials' }); const valid = await bcrypt.compare(password, user.password_hash); if (!valid) return res.status(401).json({ error: 'Invalid credentials' }); const token = jwt.sign({ id: user.id, role_id: user.role_id }, process.env.JWT_SECRET, { expiresIn: '1d' }); res.json({ token, user: { id: user.id, email: user.email, name: user.name, role_id: user.role_id } }); } catch (err) { res.status(500).json({ error: err.message }); } }, };