update: user service

This commit is contained in:
2025-10-08 11:35:50 +07:00
parent 0ae39aa504
commit 58cb0c8425

View File

@@ -1,122 +1,174 @@
const { const {
createUserDb, createUserDb,
changeUserPasswordDb,
getUserByIdDb, getUserByIdDb,
updateUserDb,
deleteUserDb,
getAllUsersDb, getAllUsersDb,
getUserByUsernameDb, getUserByUsernameDb,
getAllRoleDb updateUserDb,
} = require("../db/user.db"); deleteUserDb,
const { ErrorHandler } = require("../helpers/error"); changeUserPasswordDb
const { convertId } = require("../helpers/utils"); } = require('../db/user.db');
const { hashPassword } = require('../helpers/hashPassword');
const { ErrorHandler } = require('../helpers/error');
const statusName = [ const statusName = [
{ { status: true, status_name: "Aktif" },
status: true, { status: false, status_name: "NonAktif" }
status_name: "Aktif"
}, {
status: false,
status_name: "NonAktif"
}
]; ];
class UserService { class UserService {
// Get all status users
getAllStatusUsers = async () => { getAllStatusUsers = async () => {
try { try {
return statusName; return statusName;
} catch (error) { } catch (error) {
throw new ErrorHandler(error.statusCode, error.message); throw new ErrorHandler(error.statusCode || 500, error.message);
} }
}; };
getAllUsers = async (param) => { // Get all users
getAllUsers = async () => {
try { try {
const results = await getAllUsersDb(param); const results = await getAllUsersDb();
results.data.map(element => { results.forEach(user => {
element.is_active = element.is_active == 1 ? true : false user.is_active = user.is_active == 1;
element.is_active_name = convertId(statusName, element.is_active, 'status', 'status_name') user.is_active_name = statusName.find(s => s.status === user.is_active)?.status_name;
delete user.user_password; // remove password
}); });
return results return results;
} catch (error) { } catch (error) {
throw new ErrorHandler(error.statusCode, error.message); throw new ErrorHandler(error.statusCode || 500, error.message);
}
};
createUser = async (param) => {
try {
const userByUsername = await getUserByUsernameDb(param.userName, param.tenantID);
if (userByUsername) {
throw new ErrorHandler(401, "username taken already");
}
return await createUserDb(param);
} catch (error) {
throw new ErrorHandler(error.statusCode, error.message);
} }
}; };
// Get user by ID
getUserById = async (id) => { getUserById = async (id) => {
try { try {
const user = await getUserByIdDb(id); const user = await getUserByIdDb(id);
// user.password = undefined; if (!user) throw new ErrorHandler(404, "User not found");
user.is_active = user.is_active == 1 ? true : false
user.is_active = user.is_active == 1;
user.is_active_name = statusName.find(s => s.status === user.is_active)?.status_name;
delete user.user_password;
return user; return user;
} catch (error) { } catch (error) {
throw new ErrorHandler(error.statusCode, error.message); throw new ErrorHandler(error.statusCode || 500, error.message);
} }
}; };
changeUserPassword = async (password, email, tenantID) => { // Create users
createUser = async ({ fullname, name, email, phone, password, role_id = null, is_sa = 0, is_active = 1, approved_by }) => {
try { try {
return await changeUserPasswordDb(password, email, tenantID); const existingUser = await getUserByUsernameDb(name);
if (existingUser) throw new ErrorHandler(400, "Username already taken");
const hashedPassword = await hashPassword(password);
const userId = await createUserDb({
user_fullname: fullname,
user_name: name,
user_email: email,
user_phone: phone,
user_password: hashedPassword,
role_id,
is_sa,
is_active,
is_approve: 1,
approved_by,
approved_at: new Date()
});
return {
user_id: userId,
user_fullname: fullname,
user_name: name,
user_email: email,
user_phone: phone,
role_id,
is_sa,
is_active,
is_approve: 1,
approved_by
};
} catch (error) { } catch (error) {
throw new ErrorHandler(error.statusCode, error.message); throw new ErrorHandler(error.statusCode || 500, error.message);
} }
}; };
updateUser = async (param) => { // Update user
const { userName, id } = param; updateUser = async ({ user_id, fullname, name, email, phone, role_id, is_sa, is_active, is_approve }) => {
const errors = {};
try { try {
const user = await getUserByIdDb(user_id);
if (!user) throw new ErrorHandler(404, "User not found");
const user = await getUserByIdDb(id); // Cek username
if (name && user.user_name.toLowerCase() !== name.toLowerCase()) {
const findUserByUsername = await getUserByUsernameDb(userName, param.tenantID); const userByName = await getUserByUsernameDb(name);
if (userByName) throw new ErrorHandler(400, "Username already taken");
const usernameChanged = userName && user.user_name.toLowerCase() !== userName.toLowerCase();
if (usernameChanged && typeof findUserByUsername === "object") {
errors["username"] = "Username is already taken";
} }
if (Object.keys(errors).length > 0) { const updateData = {
throw new ErrorHandler(403, errors); ...(fullname && { user_fullname: fullname }),
} ...(name && { user_name: name }),
...(email && { user_email: email }),
...(phone && { user_phone: phone }),
...(role_id !== undefined && { role_id }),
...(is_sa !== undefined && { is_sa }),
...(is_active !== undefined && { is_active }),
...(is_approve !== undefined && { is_approve })
};
return await updateUserDb(param); await updateUserDb(user_id, updateData);
const updatedUser = await getUserByIdDb(user_id);
delete updatedUser.user_password;
updatedUser.is_active = updatedUser.is_active == 1;
updatedUser.is_active_name = statusName.find(s => s.status === updatedUser.is_active)?.status_name;
return updatedUser;
} catch (error) { } catch (error) {
throw new ErrorHandler(error.statusCode, error.message); throw new ErrorHandler(error.statusCode || 500, error.message);
} }
}; };
deleteUser = async (id, userID) => { // Approve user
approveUser = async (userId, approverId) => {
try { try {
return await deleteUserDb(id, userID); const updateData = {
is_approve: 1,
approved_by: approverId,
approved_at: new Date()
};
await updateUserDb(userId, updateData);
const updatedUser = await getUserByIdDb(userId);
delete updatedUser.user_password;
return updatedUser;
} catch (error) { } catch (error) {
throw new ErrorHandler(error.statusCode, error.message); throw new ErrorHandler(error.statusCode || 500, error.message);
} }
}; };
getAllRoles = async (tenantID) => { // Delete user (soft delete)
deleteUser = async (userId, deletedBy) => {
try { try {
return await getAllRoleDb(tenantID); await deleteUserDb(userId, deletedBy);
return { message: "User deleted successfully" };
} catch (error) { } catch (error) {
throw new ErrorHandler(error.statusCode, error.message); throw new ErrorHandler(error.statusCode || 500, error.message);
}
};
// Change password
changeUserPassword = async (userId, newPassword) => {
try {
const hashedPassword = await hashPassword(newPassword);
await changeUserPasswordDb(userId, hashedPassword);
return { message: "Password updated successfully" };
} catch (error) {
throw new ErrorHandler(error.statusCode || 500, error.message);
} }
}; };
} }