diff --git a/db/user.db.js b/db/user.db.js index 46471bc..c098119 100644 --- a/db/user.db.js +++ b/db/user.db.js @@ -1,131 +1,108 @@ 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 +// Get all users +const getAllUsersDb = async () => { + const queryText = ` + SELECT u.user_id, u.user_fullname, u.user_name, u.user_email, u.user_phone, + u.is_active, u.created_at, u.updated_at, u.deleted_at, + u.updated_by, u.deleted_by, + r.role_id, r.role_name + FROM users u + LEFT JOIN roles r ON u.role_id = r.role_id + WHERE u.deleted_at IS NULL + ORDER BY u.user_id ASC `; - - 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 result = await pool.query(queryText); + return result.recordset; }; -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); +// Get user by ID +const getUserByIdDb = async (id) => { + const queryText = ` + SELECT u.user_id, u.user_fullname, u.user_name, u.user_email, u.user_phone, + u.is_active, u.created_at, u.updated_at, u.deleted_at, + u.updated_by, u.deleted_by, + r.role_id, r.role_name + FROM users u + LEFT JOIN roles r ON u.role_id = r.role_id + WHERE u.user_id = $1 AND u.deleted_at IS NULL + `; + const result = await pool.query(queryText, [id]); return result.recordset[0]; }; -const getUserByIdDb = async (id) => { - const query = ` - SELECT mut.* - FROM m_users mut - WHERE mut.user_id = $1 +// Get user by email (login) +const getUserByUserEmailDb = async (email) => { + const queryText = ` + SELECT u.user_id, u.user_fullname, u.user_name, u.user_email, u.user_phone, + 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]; }; const getUserByUsernameDb = async (username) => { - const query = ` - SELECT mut.* - FROM m_users mut - WHERE LOWER(mut.username) = LOWER($1) + const queryText = ` + SELECT u.user_id, u.user_fullname, u.user_name, u.user_email, u.user_phone, u.user_password, + u.is_active, u.role_id, + 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]; }; -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]; +// Create user +const createUserDb = async (data) => { + const { query: queryText, values } = pool.buildDynamicInsert("users", data); + const result = await pool.query(queryText, values); + return result.recordset[0]?.inserted_id || null; }; -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]; +// Update user +const updateUserDb = async (userId, data) => { + const { query: queryText, values } = pool.buildDynamicUpdate("users", data, { user_id: userId }); + await pool.query(queryText, values); + return true; }; -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 +// Change user password +const changeUserPasswordDb = async (userId, newPassword) => { + const queryText = ` + UPDATE users + SET user_password = $1, updated_at = GETDATE() + WHERE user_id = $2 AND deleted_at IS NULL `; - const result = await pool.query(query, [userID, id]); - return result.recordset[0]; + await pool.query(queryText, [newPassword, userId]); + return true; }; -const changeUserPasswordDb = async (hashedPassword, userEmail, tenantId) => { - const query = ` - UPDATE m_users - SET user_password = $1 - WHERE user_email = $2 AND tenant_id = $3 +// Soft delete user +const deleteUserDb = async (userId, deletedBy) => { + const queryText = ` + UPDATE users + 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) => { - const query = ` - SELECT * - FROM system.role_tenant - WHERE deleted_at IS NULL AND tenant_id = $1 +// Get all roles +const getAllRoleDb = async () => { + const queryText = ` + SELECT role_id, role_name + FROM roles + ORDER BY role_id ASC `; - const result = await pool.query(query, [tenantId]); + const result = await pool.query(queryText); return result.recordset; };