const User = require('../models/User'); const { generateToken } = require('../utils/jwt'); /** * Register a new user * @param {Object} req - Express request object * @param {Object} res - Express response object */ const register = async (req, res) => { try { const { name, email, password, phone, address } = req.body; // Check if user already exists const existingUser = await User.findOne({ email }); if (existingUser) { return res.status(400).json({ message: 'User already exists with this email' }); } // Create new user const user = await User.create({ name, email, password, phone, address, role: 'customer' // Default role for registrations }); // Generate token const token = generateToken(user); // Send response res.status(201).json({ message: 'User registered successfully', token, user: { id: user._id, name: user.name, email: user.email, role: user.role } }); } catch (error) { res.status(500).json({ message: 'Error registering user', error: error.message }); } }; /** * Login a user * @param {Object} req - Express request object * @param {Object} res - Express response object */ const login = async (req, res) => { try { const { email, password } = req.body; // Find user by email const user = await User.findOne({ email }).select('+password'); // Check if user exists and password is correct if (!user || !(await user.comparePassword(password))) { return res.status(401).json({ message: 'Invalid email or password' }); } // Check if user is active if (!user.active) { return res.status(401).json({ message: 'Your account has been deactivated' }); } // Generate token const token = generateToken(user); // Send response res.status(200).json({ message: 'Logged in successfully', token, user: { id: user._id, name: user.name, email: user.email, role: user.role } }); } catch (error) { res.status(500).json({ message: 'Error logging in', error: error.message }); } }; /** * Get current user profile * @param {Object} req - Express request object * @param {Object} res - Express response object */ const getProfile = async (req, res) => { try { const user = await User.findById(req.user._id); if (!user) { return res.status(404).json({ message: 'User not found' }); } res.status(200).json({ user: { id: user._id, name: user.name, email: user.email, role: user.role, phone: user.phone, address: user.address } }); } catch (error) { res.status(500).json({ message: 'Error retrieving profile', error: error.message }); } }; module.exports = { register, login, getProfile };