67 lines
2.6 KiB
JavaScript
67 lines
2.6 KiB
JavaScript
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 } });
|
|
if (!userData) {
|
|
userData = await User.findOne({ where: { email } });
|
|
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_by: req.user.id, 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 });
|
|
}
|
|
};
|