Files
hotel-api/services/user.service.js
2025-09-22 10:45:25 +07:00

125 lines
3.0 KiB
JavaScript

const {
createUserDb,
changeUserPasswordDb,
getUserByIdDb,
updateUserDb,
deleteUserDb,
getAllUsersDb,
getUserByUsernameDb,
getAllRoleDb
} = require("../db/user.db");
const { ErrorHandler } = require("../helpers/error");
const { convertId } = require("../helpers/utils");
const statusName = [
{
status: true,
status_name: "Aktif"
}, {
status: false,
status_name: "NonAktif"
}
];
class UserService {
getAllStatusUsers = async () => {
try {
return statusName;
} catch (error) {
throw new ErrorHandler(error.statusCode, error.message);
}
};
getAllUsers = async (param) => {
try {
const results = await getAllUsersDb(param);
results.data.map(element => {
element.is_active = element.is_active == 1 ? true : false
element.is_active_name = convertId(statusName, element.is_active, 'status', 'status_name')
});
return results
} catch (error) {
throw new ErrorHandler(error.statusCode, 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);
}
};
getUserById = async (id) => {
try {
const user = await getUserByIdDb(id);
// user.password = undefined;
user.is_active = user.is_active == 1 ? true : false
return user;
} catch (error) {
throw new ErrorHandler(error.statusCode, error.message);
}
};
changeUserPassword = async (password, email, tenantID) => {
try {
return await changeUserPasswordDb(password, email, tenantID);
} catch (error) {
throw new ErrorHandler(error.statusCode, error.message);
}
};
updateUser = async (param) => {
const { userName, id } = param;
const errors = {};
try {
const user = await getUserByIdDb(id);
const findUserByUsername = await getUserByUsernameDb(userName, param.tenantID);
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) {
throw new ErrorHandler(403, errors);
}
return await updateUserDb(param);
} catch (error) {
throw new ErrorHandler(error.statusCode, error.message);
}
};
deleteUser = async (id, userID) => {
try {
return await deleteUserDb(id, userID);
} catch (error) {
throw new ErrorHandler(error.statusCode, error.message);
}
};
getAllRoles = async (tenantID) => {
try {
return await getAllRoleDb(tenantID);
} catch (error) {
throw new ErrorHandler(error.statusCode, error.message);
}
};
}
module.exports = new UserService();