Add skeleton
This commit is contained in:
142
db/user.db.js
Normal file
142
db/user.db.js
Normal file
@@ -0,0 +1,142 @@
|
||||
const pool = require("../config");
|
||||
|
||||
const getAllUsersDb = async (param) => {
|
||||
// limit & offset masuk fixed param
|
||||
let fixedParams = [param.fixed.limit, param.fixed.offset, param.fixed.tenantID];
|
||||
|
||||
const { whereOrConditions, whereParam } = pool.buildStringOrIlike(
|
||||
param.filterCriteria.column,
|
||||
param.filterCriteria.criteria,
|
||||
fixedParams
|
||||
);
|
||||
const { whereConditions, queryParams } = pool.buildFilterQuery(param.filterQuery, whereParam);npm
|
||||
|
||||
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(query, queryParams);
|
||||
const rows = result.recordset;
|
||||
|
||||
const total = rows.length > 0 ? parseInt(rows[0].total, 10) : 0;
|
||||
return { data: rows, total };
|
||||
};
|
||||
|
||||
const createUserDb = async (param) => {
|
||||
const insertData = {
|
||||
tenant_id: param.tenantID,
|
||||
user_fullname: param.userFullname,
|
||||
user_name: param.userName,
|
||||
user_email: param.userEmail ?? null,
|
||||
user_password: param.userPassword,
|
||||
role_id: param.roleId ?? null,
|
||||
is_active: param.isActive ? 1 : 0,
|
||||
created_by: param.userID,
|
||||
updated_by: param.userID,
|
||||
};
|
||||
|
||||
const { query, values } = pool.buildDynamicInsert("m_users", insertData);
|
||||
|
||||
const result = await pool.query(query, values);
|
||||
return result.recordset[0];
|
||||
};
|
||||
|
||||
const getUserByIdDb = async (id) => {
|
||||
const query = `
|
||||
SELECT mut.*
|
||||
FROM m_users mut
|
||||
WHERE mut.user_id = $1
|
||||
`;
|
||||
const result = await pool.query(query, [id]);
|
||||
return result.recordset[0];
|
||||
};
|
||||
|
||||
const getUserByUsernameDb = async (username) => {
|
||||
const query = `
|
||||
SELECT mut.*
|
||||
FROM m_users mut
|
||||
WHERE LOWER(mut.username) = LOWER($1)
|
||||
`;
|
||||
const result = await pool.query(query, [username]);
|
||||
return result.recordset[0];
|
||||
};
|
||||
|
||||
const getUserByUserEmailDb = async (userEmail) => {
|
||||
const query = `
|
||||
SELECT mut.*
|
||||
FROM m_users mut
|
||||
WHERE LOWER(mut.user_email) = LOWER($1)
|
||||
`;
|
||||
const result = await pool.query(query, [userEmail]);
|
||||
return result.recordset[0];
|
||||
};
|
||||
|
||||
const updateUserDb = async (param) => {
|
||||
const updateData = {
|
||||
tenant_id: param.tenantID,
|
||||
user_fullname: param.userFullname,
|
||||
user_name: param.userName,
|
||||
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) => {
|
||||
const query = `
|
||||
UPDATE m_users
|
||||
SET deleted_at = GETDATE(), deleted_by = $1
|
||||
WHERE user_id = $2;
|
||||
|
||||
SELECT * FROM m_users WHERE user_id = $2
|
||||
`;
|
||||
const result = await pool.query(query, [userID, id]);
|
||||
return result.recordset[0];
|
||||
};
|
||||
|
||||
const changeUserPasswordDb = async (hashedPassword, userEmail, tenantId) => {
|
||||
const query = `
|
||||
UPDATE m_users
|
||||
SET user_password = $1
|
||||
WHERE user_email = $2 AND tenant_id = $3
|
||||
`;
|
||||
return pool.query(query, [hashedPassword, userEmail, tenantId]);
|
||||
};
|
||||
|
||||
const getAllRoleDb = async (tenantId) => {
|
||||
const query = `
|
||||
SELECT *
|
||||
FROM system.role_tenant
|
||||
WHERE deleted_at IS NULL AND tenant_id = $1
|
||||
`;
|
||||
const result = await pool.query(query, [tenantId]);
|
||||
return result.recordset;
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
getAllUsersDb,
|
||||
getUserByIdDb,
|
||||
getUserByUserEmailDb,
|
||||
updateUserDb,
|
||||
createUserDb,
|
||||
deleteUserDb,
|
||||
getUserByUsernameDb,
|
||||
changeUserPasswordDb,
|
||||
getAllRoleDb,
|
||||
};
|
||||
Reference in New Issue
Block a user