const userService = require("../services/user.service"); const { ErrorHandler } = require("../helpers/error"); const { setResponse } = require("../helpers/utils"); const Joi = require("joi"); const { userSchema } = require("../helpers/validation"); 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)); } } // 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)); } } // Create new user static async createUser(req, res) { try { const { error, value } = userSchema.validate(req.body, { abortEarly: false }); if (error) { const validationErrors = error.details.map((err) => err.message); throw new ErrorHandler(400, validationErrors); } // Kirim approved_by dari user yang bikin const result = await userService.createUser({ ...value, approved_by: req.user.user_id }); 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)); } } // 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 result = await userService.updateUser({ user_id: parseInt(id, 10), fullname, name, email, phone, role_id, is_sa, is_active, is_approve }); console.log("PARAM ID:", req.params); console.log("BODY:", req.body); 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)); } } // Delete user static async deleteUser(req, res) { try { const { id } = req.params; const deletedBy = req.user?.user_id; 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)); } } // Change user password static async changePassword(req, res) { try { const { id } = req.params; const { new_password } = req.body; if (!id || !new_password) { throw new ErrorHandler(400, "user_id and new_password are required"); } 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;