wisdom #2

Merged
yogiedigital merged 126 commits from wisdom into main 2025-10-20 03:26:33 +00:00
Showing only changes of commit 0ae39aa504 - Show all commits

View File

@@ -1,172 +1,157 @@
const userService = require("../services/user.service"); const userService = require("../services/user.service");
const { ErrorHandler } = require("../helpers/error"); const { ErrorHandler } = require("../helpers/error");
const { hashPassword } = require("../helpers/hashPassword"); const { setResponse } = require("../helpers/utils");
const { setResponse, setPaging, setResponsePaging } = require("../helpers/utils");
const Joi = require("joi"); const Joi = require("joi");
const { userSchema } = require("../helpers/validation");
// Definisikan skema validasi class UserController {
const validateTerm = Joi.object({ // Get all users
user_fullname: Joi.string().max(255).required(), static async getAllUsers(req, res) {
user_name: Joi.string().max(255).required(), try {
user_email: Joi.string().max(255).email().allow(null), const users = await userService.getAllUsers();
user_password: Joi.string().max(255).required(), return res.status(200).json(setResponse(users, "Users retrieved successfully", 200));
role_id: Joi.number().integer().allow(null), } catch (error) {
is_active: Joi.boolean().required() 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
}); });
const getAllUsers = async (req, res) => { 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 { const {
page = 1, fullname,
limit = 10, name,
fullname: userFullname, email,
username: userName, phone,
is_active: isActive, role_id,
criteria, is_sa,
tenantID, is_active,
} = req.query is_approve
} = req.body;
const offset = (page - 1) * limit; const result = await userService.updateUser({
user_id: parseInt(id, 10),
const filterQuery = { fullname,
fixed: { name,
limit, offset, tenantID email,
}, phone,
filterQuery: [ role_id,
{ is_sa,
type: 'string', is_active,
column: 'user_fullname', is_approve
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); console.log("PARAM ID:", req.params);
console.log("BODY:", req.body);
res.status(response.statusCode).json(response); return res.status(200).json(setResponse(result, "User updated successfully", 200));
}; } catch (error) {
return res
const getUserById = async (req, res) => { .status(error.statusCode || 500)
const { id } = req.params; .json(setResponse(null, error.message, error.statusCode || 500));
}
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({ // Delete user
userFullname: req.body.user_fullname, static async deleteUser(req, res) {
userName: req.body.user_name, try {
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 { id } = req.params;
const userID = req.userID const deletedBy = req.user?.user_id;
const results = await userService.deleteUser(id, userID); const result = await userService.deleteUser(id, deletedBy);
const response = await setResponse(results) 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));
}
}
res.status(response.statusCode).json(response); // Change user password
}; static async changePassword(req, res) {
try {
const { id } = req.params;
const { new_password } = req.body;
const getAllRoles = async (req, res) => { if (!id || !new_password) {
const results = await userService.getAllRoles(req.body.tenantID); throw new ErrorHandler(400, "user_id and new_password are required");
const response = await setResponse(results) }
res.status(response.statusCode).json(response); 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));
}
}
module.exports = { // Get all status users
getAllUsers, static async getAllStatusUsers(req, res) {
createUser, try {
getUserById, const result = await userService.getAllStatusUsers();
updateUser, return res.status(200).json(setResponse(result, "Status list retrieved successfully", 200));
deleteUser, } catch (error) {
getUserProfile, return res
getAllRoles, .status(error.statusCode || 500)
getAllStatusUsers .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;