const db = require("../models"); const bcrypt = require("bcryptjs"); const jwt = require("jsonwebtoken"); require("dotenv").config(); const User = db.user; const EstablishmentUser = db.EstablishmentUser; const Establishment = db.Establishment; // Register new user exports.register = async (req, res) => { try { const { name, email, password } = req.body; if (!name || !email || !password) return res.status(400).send({'status':"failed",'message':"All fields required",'data': ""}); const existing = await User.findOne({ where: { email } }); if (existing) res.status(400).send({'status':"failed",'message':"Email already used",'data': ""}); const hashedPassword = await bcrypt.hash(password, 10); const newUser = await User.create({ name, email, password: hashedPassword }); res.status(201).send({'status':"success",'message':"User registered successfully",'data': newUser }); } catch (err) { res.status(500).send({'status':"failed",'message':err.message }); } }; // Login user exports.login = async (req, res) => { try { const { email, password } = req.body; userRole = 'EstablishmentUser' userData = await EstablishmentUser.findOne({ where: { email, is_active : { [Op.or]: [true, 1] } } }); if (!userData) { userData = await User.findOne({ where: { email, is_active : { [Op.or]: [true, 1] } } }); userRole = 'Admin' if (!userData) res.status(404).send({'status':"failed",'message':"User not found",'data': ""}); } const validPass = await bcrypt.compare(password, userData.password); if (!validPass) res.status(401).send({'status':"failed",'message':"Invalid password",'data': ""}); if(userRole == 'Admin') { tokenData = { id: userData.id, email: userData.email , name: userData.name , role : userRole , last_login : userData.last_login } await User.update({ last_login : Date() }, { where: { id: userData.id } }); }else{ const establishment_data = await Establishment.findByPk(userData.establishment_id); tokenData = { id: userData.id, email: userData.email , name: userData.name , role : userRole , establishment_id: userData.establishment_id , establishment_data , last_login : userData.last_login } await EstablishmentUser.update({ last_login : Date(), updated_at: new Date() }, { where: { id: userData.id } }); } const token = jwt.sign(tokenData, process.env.JWT_SECRET, { expiresIn: "6h", }); res.status(200).send({'status':"success",'message':"Login successful",'data': token }); } catch (err) { res.status(500).send({'status':"failed",'message':err.message }); } };