const express = require('express'); const router = express.Router(); const bcrypt = require('bcryptjs'); const User = require('../models/User'); const auth = require('../middleware/auth'); // Get all users (admin only) router.get('/', auth, async (req, res) => { try { // Check if user is admin if (req.user.role !== 'admin') { return res.status(403).json({ message: 'Not authorized' }); } const users = await User.find().select('-password'); res.json(users); } catch (error) { console.error('Error fetching users:', error); res.status(500).json({ message: 'Server error' }); } }); // Create new user (admin only) router.post('/', auth, async (req, res) => { try { // Check if user is admin if (req.user.role !== 'admin') { return res.status(403).json({ message: 'Not authorized' }); } const { username, password, role } = req.body; // Check if user exists let user = await User.findOne({ username }); if (user) { return res.status(400).json({ message: 'User already exists' }); } // Create new user user = new User({ username, password, role: role || 'staff', }); // Hash password const salt = await bcrypt.genSalt(10); user.password = await bcrypt.hash(password, salt); await user.save(); // Return user without password const userResponse = user.toObject(); delete userResponse.password; res.status(201).json(userResponse); } catch (error) { console.error('Error creating user:', error); res.status(500).json({ message: 'Server error' }); } }); // Update user (admin only) router.put('/:id', auth, async (req, res) => { try { // Check if user is admin if (req.user.role !== 'admin') { return res.status(403).json({ message: 'Not authorized' }); } const { username, password, role } = req.body; const updateData = {}; if (username) updateData.username = username; if (role) updateData.role = role; if (password) { const salt = await bcrypt.genSalt(10); updateData.password = await bcrypt.hash(password, salt); } const user = await User.findByIdAndUpdate( req.params.id, updateData, { new: true } ).select('-password'); if (!user) { return res.status(404).json({ message: 'User not found' }); } res.json(user); } catch (error) { console.error('Error updating user:', error); res.status(500).json({ message: 'Server error' }); } }); // Delete user (admin only) router.delete('/:id', auth, async (req, res) => { try { // Check if user is admin if (req.user.role !== 'admin') { return res.status(403).json({ message: 'Not authorized' }); } const user = await User.findByIdAndDelete(req.params.id); if (!user) { return res.status(404).json({ message: 'User not found' }); } res.json({ message: 'User deleted successfully' }); } catch (error) { console.error('Error deleting user:', error); res.status(500).json({ message: 'Server error' }); } }); module.exports = router;