Files
hotel-api/services/auth.service.js
2025-09-22 10:45:25 +07:00

78 lines
2.0 KiB
JavaScript

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();