const userService = require("../services/user.service"); const { ErrorHandler } = require("../helpers/error"); const { hashPassword } = require("../helpers/hashPassword"); const { setResponse, setPaging, setResponsePaging } = require("../helpers/utils"); const Joi = require("joi"); // 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' ] } } 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); } 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 }); const response = await setResponse(results); res.status(response.statusCode).json(response); }; 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); } 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 }); const response = await setResponse(results); res.status(response.statusCode).json(response); }; const deleteUser = async (req, res) => { const { id } = req.params; const userID = req.userID const results = await userService.deleteUser(id, userID); const response = await setResponse(results) res.status(response.statusCode).json(response); }; const getAllRoles = async (req, res) => { const results = await userService.getAllRoles(req.body.tenantID); const response = await setResponse(results) res.status(response.statusCode).json(response); }; module.exports = { getAllUsers, createUser, getUserById, updateUser, deleteUser, getUserProfile, getAllRoles, getAllStatusUsers };