diff options
Diffstat (limited to 'backend/src/controllers/auth.controller.js')
-rw-r--r-- | backend/src/controllers/auth.controller.js | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/backend/src/controllers/auth.controller.js b/backend/src/controllers/auth.controller.js new file mode 100644 index 0000000..b5142d2 --- /dev/null +++ b/backend/src/controllers/auth.controller.js @@ -0,0 +1,130 @@ +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 +};
\ No newline at end of file |