183 lines
5.5 KiB
JavaScript
183 lines
5.5 KiB
JavaScript
const db = require("../models");
|
|
const bcrypt = require("bcryptjs");
|
|
const EstablishmentUser = db.EstablishmentUser;
|
|
|
|
const { sendEmailService } = require("../services/email.service");
|
|
|
|
// Create User
|
|
exports.createUser = async (req, res) => {
|
|
try {
|
|
|
|
const { establishment_id, name, email, password , gender} = req.body;
|
|
const hashed = await bcrypt.hash(password, 10);
|
|
|
|
// Check if establishment user already exists
|
|
const existingEstablishmentUser = await EstablishmentUser.findOne({where: { email }, });
|
|
if (existingEstablishmentUser) {
|
|
return res.status(400).send({status: "failed",message: "Email already exists", });
|
|
}
|
|
|
|
const user = await EstablishmentUser.create({
|
|
establishment_id,
|
|
name,
|
|
email,
|
|
password: hashed,
|
|
gender,
|
|
created_by: req.user.id,
|
|
});
|
|
|
|
//send email to user
|
|
placeHolderData = {
|
|
contact_name : name,
|
|
portal_url : process.env.FE_BASE_URL,
|
|
username : email,
|
|
password : password,
|
|
support_email : process.env.SUPPORT_EMAIL,
|
|
support_phone : process.env.SUPPORT_PHONE,
|
|
|
|
}
|
|
await sendEmailService(email, 'establishment_user_creation_to_user', placeHolderData);
|
|
|
|
return res.status(201).send({'status':"success",'message':"Creation successful",'data': user });
|
|
|
|
} catch (err) {
|
|
return res.status(500).send({'status':"failed",'message':err.message });
|
|
}
|
|
};
|
|
|
|
// Get all users
|
|
exports.getAllUsers = async (req, res) => {
|
|
try {
|
|
|
|
const users = await EstablishmentUser.findAll({ where:{ establishment_id : req.query.establishment_id} });
|
|
return res.status(200).send({'status':"success",'message':"Fetched successfully",'data': users });
|
|
|
|
} catch (err) {
|
|
return res.status(500).send({'status':"failed",'message':err.message });
|
|
}
|
|
};
|
|
|
|
// Get user by id
|
|
exports.getUserById = async (req, res) => {
|
|
try {
|
|
|
|
const user = await EstablishmentUser.findByPk(req.params.id);
|
|
|
|
if (!user) res.status(404).send({'status':"failed",'message':"Record not found",'data': "" });
|
|
|
|
return res.status(200).send({'status':"success",'message':"Fetched successfully",'data': user });
|
|
|
|
} catch (err) {
|
|
return res.status(500).send({'status':"failed",'message':err.message });
|
|
}
|
|
};
|
|
|
|
// Update user
|
|
exports.updateUser = async (req, res) => {
|
|
try {
|
|
|
|
const { name, email, is_active, password } = req.body;
|
|
const data = {};
|
|
|
|
// Allow updates only if fields are provided
|
|
if (name !== undefined && name !== null) data.name = name;
|
|
if (email !== undefined && email !== null) data.email = email;
|
|
if (is_active !== undefined && is_active !== null) data.is_active = is_active;
|
|
if (password && password.trim() !== "") data.password = await bcrypt.hash(password, 10);
|
|
data.updated_by = req.body.updated_by || req.user.id;
|
|
data.updated_at = req.body.updated_at || new Date();
|
|
|
|
const [updated] = await EstablishmentUser.update(data, {
|
|
where: { id: req.params.id },
|
|
});
|
|
|
|
if (!updated) return res.status(404).send({'status':"failed",'message':"Record not found",'data': "" });
|
|
|
|
return res.status(200).send({'status':"success",'message':"Record updated successfully",'data': "" });
|
|
|
|
} catch (err) {
|
|
return res.status(500).send({'status':"failed",'message':err.message });
|
|
}
|
|
};
|
|
|
|
// Change Establishment User Password
|
|
exports.changeUserPassword = async (req, res) => {
|
|
try {
|
|
const { old_password, new_password, confirm_password } = req.body;
|
|
const userId = req.params.id;
|
|
|
|
// Validate inputs
|
|
if (!old_password || !new_password || !confirm_password) {
|
|
return res.status(400).send({
|
|
status: "error",
|
|
code: "MISSING_FIELDS",
|
|
message: "All password fields are required"
|
|
});
|
|
}
|
|
|
|
if (new_password !== confirm_password) {
|
|
return res.status(400).send({
|
|
status: "error",
|
|
code: "PASSWORD_MISMATCH",
|
|
message: "New password and confirm password do not match"
|
|
});
|
|
}
|
|
|
|
// Find user
|
|
const user = await EstablishmentUser.findByPk(userId);
|
|
if (!user) {
|
|
return res.status(404).send({
|
|
status: "error",
|
|
code: "USER_NOT_FOUND",
|
|
message: "User not found"
|
|
});
|
|
}
|
|
|
|
// Verify old password
|
|
const isMatch = await bcrypt.compare(old_password, user.password);
|
|
if (!isMatch) {
|
|
return res.status(401).send({
|
|
status: "error",
|
|
code: "OLD_PASSWORD_INCORRECT",
|
|
message: "Old password is incorrect"
|
|
});
|
|
}
|
|
|
|
// Hash and update new password
|
|
const hashedPassword = await bcrypt.hash(new_password, 10);
|
|
await EstablishmentUser.update(
|
|
{ password: hashedPassword, updated_by: req.user.id, updated_at: new Date() },
|
|
{ where: { id: userId } }
|
|
);
|
|
|
|
return res.status(200).send({
|
|
status: "ok",
|
|
code: "PASSWORD_UPDATED",
|
|
message: "Password updated successfully"
|
|
});
|
|
|
|
} catch (err) {
|
|
return res.status(500).send({
|
|
status: "error",
|
|
code: "SERVER_ERROR",
|
|
message: "An unexpected error occurred"
|
|
});
|
|
}
|
|
};
|
|
|
|
|
|
// Delete user
|
|
exports.deleteUser = async (req, res) => {
|
|
try {
|
|
|
|
const deleted = await EstablishmentUser.destroy({ where: { id: req.params.id } });
|
|
|
|
if (!deleted) return res.status(404).send({'status':"failed",'message':"Record not found",'data': "" });
|
|
|
|
return res.status(200).send({'status':"success",'message':"Record deleted successfully",'data': "" });
|
|
|
|
} catch (err) {
|
|
return res.status(500).send({'status':"failed",'message':err.message });
|
|
}
|
|
};
|