From 0ae39aa504702a99bb4042c3c6cdb0a02d1e6204 Mon Sep 17 00:00:00 2001 From: Antony Kurniawan Date: Wed, 8 Oct 2025 11:35:38 +0700 Subject: [PATCH] update: user controller --- controllers/users.controller.js | 285 +++++++++++++++----------------- 1 file changed, 135 insertions(+), 150 deletions(-) diff --git a/controllers/users.controller.js b/controllers/users.controller.js index ae9548e..5581127 100644 --- a/controllers/users.controller.js +++ b/controllers/users.controller.js @@ -1,172 +1,157 @@ const userService = require("../services/user.service"); const { ErrorHandler } = require("../helpers/error"); -const { hashPassword } = require("../helpers/hashPassword"); -const { setResponse, setPaging, setResponsePaging } = require("../helpers/utils"); +const { setResponse } = require("../helpers/utils"); const Joi = require("joi"); +const { userSchema } = require("../helpers/validation"); -// Definisikan skema validasi -const validateTerm = Joi.object({ - user_fullname: Joi.string().max(255).required(), - user_name: Joi.string().max(255).required(), - user_email: Joi.string().max(255).email().allow(null), - user_password: Joi.string().max(255).required(), - role_id: Joi.number().integer().allow(null), - is_active: Joi.boolean().required() -}); - -const getAllUsers = async (req, res) => { - - const { - page = 1, - limit = 10, - fullname: userFullname, - username: userName, - is_active: isActive, - criteria, - tenantID, - } = req.query - - const offset = (page - 1) * limit; - - const filterQuery = { - fixed: { - limit, offset, tenantID - }, - filterQuery: [ - { - type: 'string', - column: 'user_fullname', - param: userFullname - }, - { - type: 'string', - column: 'user_name', - param: userName - }, - { - type: 'number', - column: 'is_active', - param: isActive - } - ], - filterCriteria: - { - criteria, - column: [ - 'user_fullname', 'user_name' - ] +class UserController { + // Get all users + static async getAllUsers(req, res) { + try { + const users = await userService.getAllUsers(); + return res.status(200).json(setResponse(users, "Users retrieved successfully", 200)); + } catch (error) { + return res + .status(error.statusCode || 500) + .json(setResponse(null, error.message, error.statusCode || 500)); } } - const results = await userService.getAllUsers(filterQuery) - const response = await setResponsePaging(results.data, results.total, parseInt(limit), parseInt(page)) - - res.status(response.statusCode).json(response) -}; - -const getAllStatusUsers = async (req, res) => { - - const results = await userService.getAllStatusUsers(); - const response = await setResponse(results) - - res.status(response.statusCode).json(response); -}; - -const createUser = async (req, res) => { - - // Lakukan validasi - const { error } = validateTerm.validate(req.body, { stripUnknown: true }); - if (error) { - const response = await setResponse([], error.details[0].message, 400) - return res.status(response.statusCode).json(response); + // Get user by ID + static async getUserById(req, res) { + try { + const { id } = req.params; + const user = await userService.getUserById(id); + return res.status(200).json(setResponse(user, "User retrieved successfully", 200)); + } catch (error) { + return res + .status(error.statusCode || 500) + .json(setResponse(null, error.message, error.statusCode || 500)); + } } - const results = await userService.createUser({ - userFullname: req.body.user_fullname, - userName: req.body.user_name, - userEmail: req.body.user_email, - userPassword: req.body.user_password, - roleId: req.body.role_id, - isActive: req.body.is_active, // default 1 jika tidak dikirim - userID: req.body.userID, - tenantID: req.body.tenantID - }); + // Create new user + static async createUser(req, res) { + try { + const { error, value } = userSchema.validate(req.body, { abortEarly: false }); - const response = await setResponse(results); + if (error) { + const validationErrors = error.details.map((err) => err.message); + throw new ErrorHandler(400, validationErrors); + } - res.status(response.statusCode).json(response); -}; + // Kirim approved_by dari user yang bikin + const result = await userService.createUser({ + ...value, + approved_by: req.user.user_id + }); -const getUserById = async (req, res) => { - const { id } = req.params; - - const results = await userService.getUserById(id); - const response = await setResponse(results) - - res.status(response.statusCode).json(response); -}; - -const getUserProfile = async (req, res) => { - const { id } = req.user; - - const results = await userService.getUserById(id); - const response = await setResponse(results) - - res.status(response.statusCode).json(response); -}; - -const updateUser = async (req, res) => { - - const { id } = req.params; - - // Lakukan validasi - const { error } = validateTerm.validate(req.body, { stripUnknown: true }); - if (error) { - const response = await setResponse([], error.details[0].message, 400) - return res.status(response.statusCode).json(response); + return res.status(201).json(setResponse(result, "User created successfully", 201)); + } catch (error) { + return res + .status(error.statusCode || 500) + .json(setResponse(null, error.message, error.statusCode || 500)); + } } - const results = await userService.updateUser({ - userFullname: req.body.user_fullname, - userName: req.body.user_name, - userEmail: req.body.user_email, - userPassword: req.body.user_password, - roleId: req.body.role_id, - isActive: req.body.is_active, // default 1 jika tidak dikirim - userID: req.body.userID, - tenantID: req.body.tenantID, - id - }); + // Update user + static async updateUser(req, res) { + try { + const { id } = req.params; + const { + fullname, + name, + email, + phone, + role_id, + is_sa, + is_active, + is_approve + } = req.body; - const response = await setResponse(results); + const result = await userService.updateUser({ + user_id: parseInt(id, 10), + fullname, + name, + email, + phone, + role_id, + is_sa, + is_active, + is_approve + }); - res.status(response.statusCode).json(response); -}; + console.log("PARAM ID:", req.params); + console.log("BODY:", req.body); -const deleteUser = async (req, res) => { - const { id } = req.params; - const userID = req.userID + return res.status(200).json(setResponse(result, "User updated successfully", 200)); + } catch (error) { + return res + .status(error.statusCode || 500) + .json(setResponse(null, error.message, error.statusCode || 500)); + } + } - const results = await userService.deleteUser(id, userID); - const response = await setResponse(results) + // Delete user + static async deleteUser(req, res) { + try { + const { id } = req.params; + const deletedBy = req.user?.user_id; - res.status(response.statusCode).json(response); -}; + const result = await userService.deleteUser(id, deletedBy); + return res.status(200).json(setResponse(result, "User deleted successfully", 200)); + } catch (error) { + return res + .status(error.statusCode || 500) + .json(setResponse(null, error.message, error.statusCode || 500)); + } + } -const getAllRoles = async (req, res) => { - const results = await userService.getAllRoles(req.body.tenantID); - const response = await setResponse(results) + // Change user password + static async changePassword(req, res) { + try { + const { id } = req.params; + const { new_password } = req.body; - res.status(response.statusCode).json(response); -}; + if (!id || !new_password) { + throw new ErrorHandler(400, "user_id and new_password are required"); + } -module.exports = { - getAllUsers, - createUser, - getUserById, - updateUser, - deleteUser, - getUserProfile, - getAllRoles, - getAllStatusUsers -}; + const result = await userService.changeUserPassword(user_id, new_password); + return res.status(200).json(setResponse(result, "Password changed successfully", 200)); + } catch (error) { + return res + .status(error.statusCode || 500) + .json(setResponse(null, error.message, error.statusCode || 500)); + } + } + + // Get all status users + static async getAllStatusUsers(req, res) { + try { + const result = await userService.getAllStatusUsers(); + return res.status(200).json(setResponse(result, "Status list retrieved successfully", 200)); + } catch (error) { + return res + .status(error.statusCode || 500) + .json(setResponse(null, error.message, error.statusCode || 500)); + } + } + + // Approve user + static async approveUser(req, res) { + try { + const { id } = req.params; + const approverId = req.user?.user_id || null; + + const result = await userService.approveUser(id, approverId); + return res.status(200).json(setResponse(result, "User approved successfully", 200)); + } catch (error) { + return res + .status(error.statusCode || 500) + .json(setResponse(null, error.message, error.statusCode || 500)); + } + } +} + +module.exports = UserController;