const { getAllUsersDb, getUserByIdDb, getUserByUserEmailDb, getUserByUsernameDb, createUserDb, updateUserDb, approveUserDb, deleteUserDb, changeUserPasswordDb } = require('../db/user.db'); const { hashPassword } = require('../helpers/hashPassword'); const { ErrorHandler } = require('../helpers/error'); class UserService { // Get all users static async getAllUsers(param) { try { const results = await getAllUsersDb(param); return results; } catch (error) { throw new ErrorHandler(error.statusCode, error.message); } } // Get user by ID static async getUserById(id) { try { const result = await getUserByIdDb(id); if (!result) throw new ErrorHandler(404, 'User not found'); return result; } catch (error) { throw new ErrorHandler(error.statusCode, error.message); } } // Create user static async createUser(data) { try { if (!data || typeof data !== 'object') data = {}; const creatorId = data.userId; const existingEmail = await getUserByUserEmailDb(data.user_email); const existingUsername = await getUserByUsernameDb(data.user_name); if (existingUsername) { throw new ErrorHandler(400, 'Username is already taken'); } if (existingEmail) { throw new ErrorHandler(400, 'Email is already taken'); } if (data.user_password) { data.user_password = await hashPassword(data.user_password); } data.is_approve = 1; data.approved_by = creatorId; data.created_by = creatorId; data.updated_by = creatorId; data.is_sa = 0; data.is_active = 1; delete data.userId; const result = await createUserDb(data); return result; } catch (error) { throw new ErrorHandler(error.statusCode || 500, error.message); } } // Update user static async updateUser(id, data) { try { if (!data || typeof data !== 'object') data = {}; const existingEmail = await getUserByUserEmailDb(data.user_email); const existingUsername = await getUserByUsernameDb(data.user_name); if (existingUsername) { throw new ErrorHandler(400, 'Username is already taken'); } if (existingEmail) { throw new ErrorHandler(400, 'Email is already taken') } const userExist = await getUserByIdDb(id); if (!userExist) throw new ErrorHandler(404, 'User not found'); const result = await updateUserDb(id, data); return result; } catch (error) { throw new ErrorHandler(error.statusCode, error.message); } } // Approve user static async approveUser(userId, approverId) { try { if (!userId) { throw new ErrorHandler(400, 'User ID is required'); } const existingUser = await getUserByIdDb(userId); if (!existingUser) { throw new ErrorHandler(404, 'User not found'); } if (existingUser.is_approve) { throw new ErrorHandler(400, 'User is already approved'); } const updatedUser = await approveUserDb(userId, approverId); return updatedUser; } catch (error) { throw new ErrorHandler(error.statusCode || 500, error.message); } } // Soft delete user static async deleteUser(id, userId) { try { const userExist = await getUserByIdDb(id); if (!userExist) throw new ErrorHandler(404, 'User not found'); const result = await deleteUserDb(id, userId); return result; } catch (error) { throw new ErrorHandler(error.statusCode, error.message); } } // Change password static async changeUserPassword(id, newPassword) { try { const userExist = await getUserByIdDb(id); if (!userExist) throw new ErrorHandler(404, 'User not found'); const result = await changeUserPasswordDb(id, newPassword); return result; } catch (error) { throw new ErrorHandler(error.statusCode, error.message); } } } module.exports = UserService;