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();