const express = require("express"); const bcrypt = require("bcryptjs"); const jwt = require("jsonwebtoken"); const User = require("../models/User"); const auth = require("../middleware/auth"); const router = express.Router(); // Get user router.get("/", auth, async (req, res) => { try { const user = await User.findById(req.user.id).select("-password"); res.json(user); } catch (err) { console.error(err.message); res.status(500).send("Server error"); } }); // Register router.post("/register", async (req, res) => { const { name, email, password } = req.body; try { let user = await User.findOne({ email }); if (user) { return res.status(400).json({ msg: "User already exists" }); } user = new User({ name, email, password, }); const salt = await bcrypt.genSalt(10); user.password = await bcrypt.hash(password, salt); await user.save(); const payload = { user: { id: user.id, }, }; jwt.sign( payload, process.env.JWT_SECRET, { expiresIn: 3600 }, (err, token) => { if (err) throw err; res.json({ token }); }, ); } catch (err) { console.error(err.message); res.status(500).send("Server error"); } }); // Login router.post("/login", async (req, res) => { const { email, password } = req.body; try { let user = await User.findOne({ email }); if (!user) { return res.status(400).json({ msg: "Invalid credentials" }); } const isMatch = await bcrypt.compare(password, user.password); if (!isMatch) { return res.status(400).json({ msg: "Invalid credentials" }); } const payload = { user: { id: user.id, }, }; jwt.sign( payload, process.env.JWT_SECRET, { expiresIn: 3600 }, (err, token) => { if (err) throw err; res.json({ token }); }, ); } catch (err) { console.error(err.message); res.status(500).send("Server error"); } }); module.exports = router;