152 lines
3.9 KiB
JavaScript
152 lines
3.9 KiB
JavaScript
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;
|