fcsc_ipi_backend/app/controllers/establishment_user.controller.js

136 lines
4.2 KiB
JavaScript

const db = require("../models");
const bcrypt = require("bcryptjs");
const EstablishmentUser = db.EstablishmentUser;
// Create User
exports.createUser = async (req, res) => {
try {
const { establishment_id, name, email, password , gender} = req.body;
const hashed = await bcrypt.hash(password, 10);
const user = await EstablishmentUser.create({
establishment_id,
name,
email,
password: hashed,
gender,
});
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);
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: "failed", message: "All password fields are required" });
}
if (new_password !== confirm_password) {
return res.status(400).send({ status: "failed", 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: "failed", message: "User not found" });
}
// Verify old password
const isMatch = await bcrypt.compare(old_password, user.password);
if (!isMatch) {
return res.status(400).send({ status: "failed", message: "Old password is incorrect" });
}
// Hash and update new password
const hashedPassword = await bcrypt.hash(new_password, 10);
await EstablishmentUser.update(
{ password: hashedPassword },
{ where: { id: userId } }
);
return res.status(200).send({status: "success", message: "Password updated successfully",});
} catch (err) {
return res.status(500).send({ status: "failed", message: err.message });
}
};
// 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 });
}
};