173 lines
4.3 KiB
JavaScript
173 lines
4.3 KiB
JavaScript
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
|
|
};
|