update: user controller
This commit is contained in:
@@ -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));
|
||||||
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)
|
// Get user by ID
|
||||||
const response = await setResponsePaging(results.data, results.total, parseInt(limit), parseInt(page))
|
static async getUserById(req, res) {
|
||||||
|
try {
|
||||||
res.status(response.statusCode).json(response)
|
const { id } = req.params;
|
||||||
};
|
const user = await userService.getUserById(id);
|
||||||
|
return res.status(200).json(setResponse(user, "User retrieved successfully", 200));
|
||||||
const getAllStatusUsers = async (req, res) => {
|
} catch (error) {
|
||||||
|
return res
|
||||||
const results = await userService.getAllStatusUsers();
|
.status(error.statusCode || 500)
|
||||||
const response = await setResponse(results)
|
.json(setResponse(null, error.message, error.statusCode || 500));
|
||||||
|
}
|
||||||
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({
|
// Create new user
|
||||||
userFullname: req.body.user_fullname,
|
static async createUser(req, res) {
|
||||||
userName: req.body.user_name,
|
try {
|
||||||
userEmail: req.body.user_email,
|
const { error, value } = userSchema.validate(req.body, { abortEarly: false });
|
||||||
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);
|
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) => {
|
return res.status(201).json(setResponse(result, "User created successfully", 201));
|
||||||
const { id } = req.params;
|
} catch (error) {
|
||||||
|
return res
|
||||||
const results = await userService.getUserById(id);
|
.status(error.statusCode || 500)
|
||||||
const response = await setResponse(results)
|
.json(setResponse(null, error.message, error.statusCode || 500));
|
||||||
|
}
|
||||||
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({
|
// Update user
|
||||||
userFullname: req.body.user_fullname,
|
static async updateUser(req, res) {
|
||||||
userName: req.body.user_name,
|
try {
|
||||||
userEmail: req.body.user_email,
|
const { id } = req.params;
|
||||||
userPassword: req.body.user_password,
|
const {
|
||||||
roleId: req.body.role_id,
|
fullname,
|
||||||
isActive: req.body.is_active, // default 1 jika tidak dikirim
|
name,
|
||||||
userID: req.body.userID,
|
email,
|
||||||
tenantID: req.body.tenantID,
|
phone,
|
||||||
id
|
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) => {
|
return res.status(200).json(setResponse(result, "User updated successfully", 200));
|
||||||
const { id } = req.params;
|
} catch (error) {
|
||||||
const userID = req.userID
|
return res
|
||||||
|
.status(error.statusCode || 500)
|
||||||
|
.json(setResponse(null, error.message, error.statusCode || 500));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const results = await userService.deleteUser(id, userID);
|
// Delete user
|
||||||
const response = await setResponse(results)
|
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) => {
|
// Change user password
|
||||||
const results = await userService.getAllRoles(req.body.tenantID);
|
static async changePassword(req, res) {
|
||||||
const response = await setResponse(results)
|
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 = {
|
const result = await userService.changeUserPassword(user_id, new_password);
|
||||||
getAllUsers,
|
return res.status(200).json(setResponse(result, "Password changed successfully", 200));
|
||||||
createUser,
|
} catch (error) {
|
||||||
getUserById,
|
return res
|
||||||
updateUser,
|
.status(error.statusCode || 500)
|
||||||
deleteUser,
|
.json(setResponse(null, error.message, error.statusCode || 500));
|
||||||
getUserProfile,
|
}
|
||||||
getAllRoles,
|
}
|
||||||
getAllStatusUsers
|
|
||||||
};
|
// 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;
|
||||||
|
|||||||
Reference in New Issue
Block a user