update: user db
This commit is contained in:
177
db/user.db.js
177
db/user.db.js
@@ -1,131 +1,108 @@
|
|||||||
const pool = require("../config");
|
const pool = require("../config");
|
||||||
|
|
||||||
const getAllUsersDb = async (param) => {
|
// Get all users
|
||||||
// limit & offset masuk fixed param
|
const getAllUsersDb = async () => {
|
||||||
let fixedParams = [param.fixed.limit, param.fixed.offset, param.fixed.tenantID];
|
const queryText = `
|
||||||
|
SELECT u.user_id, u.user_fullname, u.user_name, u.user_email, u.user_phone,
|
||||||
const { whereOrConditions, whereParam } = pool.buildStringOrIlike(
|
u.is_active, u.created_at, u.updated_at, u.deleted_at,
|
||||||
param.filterCriteria.column,
|
u.updated_by, u.deleted_by,
|
||||||
param.filterCriteria.criteria,
|
r.role_id, r.role_name
|
||||||
fixedParams
|
FROM users u
|
||||||
);
|
LEFT JOIN roles r ON u.role_id = r.role_id
|
||||||
const { whereConditions, queryParams } = pool.buildFilterQuery(param.filterQuery, whereParam);npm
|
WHERE u.deleted_at IS NULL
|
||||||
|
ORDER BY u.user_id ASC
|
||||||
const query = `
|
|
||||||
SELECT mut.*, mr.role_name, COUNT(*) OVER() AS total
|
|
||||||
FROM m_users mut
|
|
||||||
LEFT JOIN system.role_tenant mr ON mr.role_id = mut.role_id
|
|
||||||
WHERE mut.deleted_at IS NULL AND mut.is_sa != 1 AND mut.tenant_id = $3
|
|
||||||
${whereConditions.length > 0 ? ` AND ${whereConditions.join(" AND ")}` : ""}
|
|
||||||
${whereOrConditions ? whereOrConditions : ""}
|
|
||||||
ORDER BY mut.user_id
|
|
||||||
OFFSET $2 ROWS FETCH NEXT $1 ROWS ONLY
|
|
||||||
`;
|
`;
|
||||||
|
const result = await pool.query(queryText);
|
||||||
const result = await pool.query(query, queryParams);
|
return result.recordset;
|
||||||
const rows = result.recordset;
|
|
||||||
|
|
||||||
const total = rows.length > 0 ? parseInt(rows[0].total, 10) : 0;
|
|
||||||
return { data: rows, total };
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const createUserDb = async (param) => {
|
// Get user by ID
|
||||||
const insertData = {
|
const getUserByIdDb = async (id) => {
|
||||||
tenant_id: param.tenantID,
|
const queryText = `
|
||||||
user_fullname: param.userFullname,
|
SELECT u.user_id, u.user_fullname, u.user_name, u.user_email, u.user_phone,
|
||||||
user_name: param.userName,
|
u.is_active, u.created_at, u.updated_at, u.deleted_at,
|
||||||
user_email: param.userEmail ?? null,
|
u.updated_by, u.deleted_by,
|
||||||
user_password: param.userPassword,
|
r.role_id, r.role_name
|
||||||
role_id: param.roleId ?? null,
|
FROM users u
|
||||||
is_active: param.isActive ? 1 : 0,
|
LEFT JOIN roles r ON u.role_id = r.role_id
|
||||||
created_by: param.userID,
|
WHERE u.user_id = $1 AND u.deleted_at IS NULL
|
||||||
updated_by: param.userID,
|
`;
|
||||||
};
|
const result = await pool.query(queryText, [id]);
|
||||||
|
|
||||||
const { query, values } = pool.buildDynamicInsert("m_users", insertData);
|
|
||||||
|
|
||||||
const result = await pool.query(query, values);
|
|
||||||
return result.recordset[0];
|
return result.recordset[0];
|
||||||
};
|
};
|
||||||
|
|
||||||
const getUserByIdDb = async (id) => {
|
// Get user by email (login)
|
||||||
const query = `
|
const getUserByUserEmailDb = async (email) => {
|
||||||
SELECT mut.*
|
const queryText = `
|
||||||
FROM m_users mut
|
SELECT u.user_id, u.user_fullname, u.user_name, u.user_email, u.user_phone,
|
||||||
WHERE mut.user_id = $1
|
u.user_password, u.is_active, u.is_sa,
|
||||||
|
r.role_id, r.role_name
|
||||||
|
FROM users u
|
||||||
|
LEFT JOIN roles r ON u.role_id = r.role_id
|
||||||
|
WHERE u.user_email = $1 AND u.deleted_at IS NULL
|
||||||
`;
|
`;
|
||||||
const result = await pool.query(query, [id]);
|
const result = await pool.query(queryText, [email]);
|
||||||
return result.recordset[0];
|
return result.recordset[0];
|
||||||
};
|
};
|
||||||
|
|
||||||
const getUserByUsernameDb = async (username) => {
|
const getUserByUsernameDb = async (username) => {
|
||||||
const query = `
|
const queryText = `
|
||||||
SELECT mut.*
|
SELECT u.user_id, u.user_fullname, u.user_name, u.user_email, u.user_phone, u.user_password,
|
||||||
FROM m_users mut
|
u.is_active, u.role_id,
|
||||||
WHERE LOWER(mut.username) = LOWER($1)
|
r.role_name
|
||||||
|
FROM users u
|
||||||
|
LEFT JOIN roles r ON u.role_id = r.role_id
|
||||||
|
WHERE u.user_name = $1 AND u.deleted_at IS NULL
|
||||||
`;
|
`;
|
||||||
const result = await pool.query(query, [username]);
|
const result = await pool.query(queryText, [username]);
|
||||||
return result.recordset[0];
|
return result.recordset[0];
|
||||||
};
|
};
|
||||||
|
|
||||||
const getUserByUserEmailDb = async (userEmail) => {
|
// Create user
|
||||||
const query = `
|
const createUserDb = async (data) => {
|
||||||
SELECT mut.*
|
const { query: queryText, values } = pool.buildDynamicInsert("users", data);
|
||||||
FROM m_users mut
|
const result = await pool.query(queryText, values);
|
||||||
WHERE LOWER(mut.user_email) = LOWER($1)
|
return result.recordset[0]?.inserted_id || null;
|
||||||
`;
|
|
||||||
const result = await pool.query(query, [userEmail]);
|
|
||||||
return result.recordset[0];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const updateUserDb = async (param) => {
|
// Update user
|
||||||
const updateData = {
|
const updateUserDb = async (userId, data) => {
|
||||||
tenant_id: param.tenantID,
|
const { query: queryText, values } = pool.buildDynamicUpdate("users", data, { user_id: userId });
|
||||||
user_fullname: param.userFullname,
|
await pool.query(queryText, values);
|
||||||
user_name: param.userName,
|
return true;
|
||||||
user_email: param.userEmail ?? null,
|
|
||||||
user_password: param.userPassword,
|
|
||||||
role_id: param.roleId ?? null,
|
|
||||||
is_active: param.isActive ? 1 : 0,
|
|
||||||
updated_by: param.userID,
|
|
||||||
};
|
|
||||||
|
|
||||||
const whereData = { user_id: param.id };
|
|
||||||
|
|
||||||
const { query, values } = pool.buildDynamicUpdate("m_users", updateData, whereData);
|
|
||||||
|
|
||||||
const result = await pool.query(query, values);
|
|
||||||
return result.recordset[0];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const deleteUserDb = async (id, userID) => {
|
// Change user password
|
||||||
const query = `
|
const changeUserPasswordDb = async (userId, newPassword) => {
|
||||||
UPDATE m_users
|
const queryText = `
|
||||||
SET deleted_at = GETDATE(), deleted_by = $1
|
UPDATE users
|
||||||
WHERE user_id = $2;
|
SET user_password = $1, updated_at = GETDATE()
|
||||||
|
WHERE user_id = $2 AND deleted_at IS NULL
|
||||||
SELECT * FROM m_users WHERE user_id = $2
|
|
||||||
`;
|
`;
|
||||||
const result = await pool.query(query, [userID, id]);
|
await pool.query(queryText, [newPassword, userId]);
|
||||||
return result.recordset[0];
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
const changeUserPasswordDb = async (hashedPassword, userEmail, tenantId) => {
|
// Soft delete user
|
||||||
const query = `
|
const deleteUserDb = async (userId, deletedBy) => {
|
||||||
UPDATE m_users
|
const queryText = `
|
||||||
SET user_password = $1
|
UPDATE users
|
||||||
WHERE user_email = $2 AND tenant_id = $3
|
SET deleted_at = GETDATE(),
|
||||||
|
deleted_by = $1
|
||||||
|
WHERE user_id = $2
|
||||||
`;
|
`;
|
||||||
return pool.query(query, [hashedPassword, userEmail, tenantId]);
|
await pool.query(queryText, [deletedBy, userId]);
|
||||||
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
const getAllRoleDb = async (tenantId) => {
|
// Get all roles
|
||||||
const query = `
|
const getAllRoleDb = async () => {
|
||||||
SELECT *
|
const queryText = `
|
||||||
FROM system.role_tenant
|
SELECT role_id, role_name
|
||||||
WHERE deleted_at IS NULL AND tenant_id = $1
|
FROM roles
|
||||||
|
ORDER BY role_id ASC
|
||||||
`;
|
`;
|
||||||
const result = await pool.query(query, [tenantId]);
|
const result = await pool.query(queryText);
|
||||||
return result.recordset;
|
return result.recordset;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user