Add skeleton

This commit is contained in:
2025-09-17 13:29:20 +07:00
parent e4d3c8e8d5
commit 3feb9aa723
2 changed files with 201 additions and 0 deletions

77
services/auth.service.js Normal file
View File

@@ -0,0 +1,77 @@
const bcrypt = require("bcrypt");
const jwt = require("jsonwebtoken");
const validateUser = require("../helpers/validateUser");
const { ErrorHandler } = require("../helpers/error");
const {
getUserByUsernameDb
} = require("../db/user.db");
const { logger } = require("../utils/logger");
class AuthService {
async login(username, password, tenantId) {
try {
// if (!validateUser(username, password)) {
// throw new ErrorHandler(403, "Invalid login");
// }
const user = await getUserByUsernameDb(username, tenantId);
console.log(user);
if (!user) {
throw new ErrorHandler(403, "Username not found.");
}
const isCorrectPassword = password === user.password
if (!isCorrectPassword) {
throw new ErrorHandler(403, "Username or password incorrect.");
}
const dataToken = {
tenant_id: tenantId,
user_id: user.user_id,
username,
fullname: user.full_name,
role_id: user.role_id
}
const token = await this.signToken(dataToken);
const refreshToken = await this.signRefreshToken(dataToken);
return {
token,
refreshToken,
role_id: dataToken.role_id,
tenant_id: tenantId,
user: {
user_id: dataToken.user_id,
fullname: dataToken.fullname,
username: dataToken.username,
},
};
} catch (error) {
throw new ErrorHandler(error.statusCode, error.message);
}
}
async signToken(data) {
try {
// console.log("signToken process.env.SECRET", process.env.SECRET)
return jwt.sign(data, process.env.SECRET, { expiresIn: "23h" });
} catch (error) {
logger.error(error);
throw new ErrorHandler(500, "An error occurred");
}
}
async signRefreshToken(data) {
try {
return jwt.sign(data, process.env.REFRESH_SECRET, { expiresIn: "23h" });
} catch (error) {
logger.error(error);
throw new ErrorHandler(500, error.message);
}
}
}
module.exports = new AuthService();

124
services/user.service.js Normal file
View File

@@ -0,0 +1,124 @@
const {
createUserDb,
changeUserPasswordDb,
getUserByIdDb,
updateUserDb,
deleteUserDb,
getAllUsersDb,
getUserByUsernameDb,
getAllRoleDb
} = require("../db/user.db");
const { ErrorHandler } = require("../helpers/error");
const { convertId } = require("../helpers/utils");
const statusName = [
{
status: true,
status_name: "Aktif"
}, {
status: false,
status_name: "NonAktif"
}
];
class UserService {
getAllStatusUsers = async () => {
try {
return statusName;
} catch (error) {
throw new ErrorHandler(error.statusCode, error.message);
}
};
getAllUsers = async (param) => {
try {
const results = await getAllUsersDb(param);
results.data.map(element => {
element.is_active = element.is_active == 1 ? true : false
element.is_active_name = convertId(statusName, element.is_active, 'status', 'status_name')
});
return results
} catch (error) {
throw new ErrorHandler(error.statusCode, error.message);
}
};
createUser = async (param) => {
try {
const userByUsername = await getUserByUsernameDb(param.userName, param.tenantID);
if (userByUsername) {
throw new ErrorHandler(401, "username taken already");
}
return await createUserDb(param);
} catch (error) {
throw new ErrorHandler(error.statusCode, error.message);
}
};
getUserById = async (id) => {
try {
const user = await getUserByIdDb(id);
// user.password = undefined;
user.is_active = user.is_active == 1 ? true : false
return user;
} catch (error) {
throw new ErrorHandler(error.statusCode, error.message);
}
};
changeUserPassword = async (password, email, tenantID) => {
try {
return await changeUserPasswordDb(password, email, tenantID);
} catch (error) {
throw new ErrorHandler(error.statusCode, error.message);
}
};
updateUser = async (param) => {
const { userName, id } = param;
const errors = {};
try {
const user = await getUserByIdDb(id);
const findUserByUsername = await getUserByUsernameDb(userName, param.tenantID);
const usernameChanged = userName && user.user_name.toLowerCase() !== userName.toLowerCase();
if (usernameChanged && typeof findUserByUsername === "object") {
errors["username"] = "Username is already taken";
}
if (Object.keys(errors).length > 0) {
throw new ErrorHandler(403, errors);
}
return await updateUserDb(param);
} catch (error) {
throw new ErrorHandler(error.statusCode, error.message);
}
};
deleteUser = async (id, userID) => {
try {
return await deleteUserDb(id, userID);
} catch (error) {
throw new ErrorHandler(error.statusCode, error.message);
}
};
getAllRoles = async (tenantID) => {
try {
return await getAllRoleDb(tenantID);
} catch (error) {
throw new ErrorHandler(error.statusCode, error.message);
}
};
}
module.exports = new UserService();