import User from "../models/userModel.js"; import jwt from "jsonwebtoken"; // Generate JWT const generateToken = (id) => { return jwt.sign({ id }, process.env.JWT_SECRET, { expiresIn: "30d", }); }; // @desc Register a new user // @route POST /api/users // @access Public const registerUser = async (req, res) => { const { name, email, password } = req.body; try { const userExists = await User.findOne({ email }); if (userExists) { res.status(400).json({ msg: "User already exists" }); return; } const user = await User.create({ name, email, password, }); if (user) { res.status(201).json({ _id: user._id, name: user.name, email: user.email, token: generateToken(user._id), }); } else { res.status(400).json({ msg: "Invalid user data" }); } } catch (error) { res.status(500).json({ msg: error.message }); } }; // @desc Auth user & get token (Login) // @route POST /api/users/login // @access Public const loginUser = async (req, res) => { const { email, password } = req.body; try { const user = await User.findOne({ email }); if (user && (await user.matchPassword(password))) { res.json({ _id: user._id, name: user.name, email: user.email, token: generateToken(user._id), }); } else { res.status(401).json({ msg: "Invalid email or password" }); } } catch (error) { res.status(500).json({ msg: error.message }); } }; export { registerUser, loginUser };