refactor: rewrite ke codebase lama

This commit is contained in:
Muhammad Zhafran Ilham
2026-06-07 20:17:49 +07:00
parent ce5487dcbf
commit fe74b2213d
146 changed files with 14608 additions and 6686 deletions
+72
View File
@@ -0,0 +1,72 @@
const authService = require('../services/auth.service');
const { response, data, error } = require('../../../helpers/utils/wrapper');
const { SUCCESS, ERROR } = require('../../../helpers/http-status/status_code');
const { BadRequestError, UnauthorizedError, InternalServerError } = require('../../../helpers/error');
const { isValidPayload } = require('../../../helpers/utils/validator');
const { loginModel } = require('../models/auth.model');
class AuthController {
async login(req, res) {
try {
const validatePayload = isValidPayload(req.body, loginModel);
if (validatePayload.err) {
return response(
res,
'fail',
{ err: validatePayload.err, data: null },
'Data tidak valid',
ERROR.EXPECTATION_FAILED
);
}
const { email, password } = validatePayload.data;
const result = await authService.login(email, password);
if (result.err) {
return response(res, 'fail', result);
}
console.log(result.data.token)
res.cookie("token", result.data.token, {
httpOnly: true,
secure: true,
sameSite: 'None',
maxAge: 7 * 24 * 60 * 60,
});
return response(res, 'success', result, 'Login berhasil', SUCCESS.OK);
} catch (err) {
return response(res, 'fail', error(new InternalServerError(err.message)), 'Terjadi kesalahan yang tidak terduga', ERROR.INTERNAL_ERROR);
}
}
async me(req, res) {
try {
const id = req.id;
if (!id) {
return response(res, 'fail', error(new UnauthorizedError('Tidak diotorisasi: ID pengguna tidak ditemukan')));
}
const result = await authService.getCurrentUser(id);
if (result.err) {
return response(res, 'fail', result);
}
return response(res, 'success', result, 'Pengguna berhasil diambil', SUCCESS.OK);
} catch (err) {
return response(res, 'fail', error(new InternalServerError(err.message)), 'Terjadi kesalahan yang tidak terduga', ERROR.INTERNAL_ERROR);
}
}
async logout(req, res) {
try {
return response(res, 'success', data(), 'Logout berhasil', SUCCESS.OK);
} catch (err) {
return response(res, 'fail', error(new InternalServerError(err.message)), 'Terjadi kesalahan yang tidak terduga', ERROR.INTERNAL_ERROR);
}
}
}
module.exports = new AuthController();
+7
View File
@@ -0,0 +1,7 @@
const authController = require('./controllers/auth.controller');
const authService = require('./services/auth.service');
module.exports = {
authController,
authService
};
+74
View File
@@ -0,0 +1,74 @@
const joi = require('joi');
const loginModel = joi.object().keys({
email: joi.string().email({ tlds: { allow: false } }).required().messages({
'string.base': 'Email harus berupa teks.',
'string.empty': 'Email tidak boleh kosong.',
'string.email': 'Format email tidak valid.',
'any.required': 'Email wajib diisi.',
}),
password: joi.string().required().messages({
'string.base': 'Password harus berupa teks.',
'string.empty': 'Password tidak boleh kosong.',
'string.min': 'Password minimal {#limit} karakter.',
'any.required': 'Password wajib diisi.',
}),
});
const registerModel = joi.object().keys({
email: joi.string().email({ tlds: { allow: false } }).required().messages({
'string.base': 'Email harus berupa teks.',
'string.empty': 'Email tidak boleh kosong.',
'string.email': 'Format email tidak valid.',
'any.required': 'Email wajib diisi.',
}),
password: joi.string()
.min(8)
.pattern(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)/)
.required()
.messages({
'string.base': 'Password harus berupa teks.',
'string.empty': 'Password tidak boleh kosong.',
'string.min': 'Password minimal {#limit} karakter.',
'string.pattern.base': 'Password harus mengandung huruf besar, huruf kecil, dan angka.',
'any.required': 'Password wajib diisi.',
}),
});
const forgotPasswordModel = joi.object().keys({
email: joi.string().email({ tlds: { allow: false } }).required().messages({
'string.base': 'Email harus berupa teks.',
'string.empty': 'Email tidak boleh kosong.',
'string.email': 'Format email tidak valid.',
'any.required': 'Email wajib diisi.',
}),
});
const resetPasswordModel = joi.object().keys({
token: joi.string().required().messages({
'string.base': 'Token harus berupa teks.',
'string.empty': 'Token tidak boleh kosong.',
'any.required': 'Token wajib diisi.',
}),
password: joi.string()
.min(8)
.pattern(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)/)
.required()
.messages({
'string.base': 'Password harus berupa teks.',
'string.empty': 'Password tidak boleh kosong.',
'string.min': 'Password minimal {#limit} karakter.',
'string.pattern.base': 'Password harus mengandung huruf besar, huruf kecil, dan angka.',
'any.required': 'Password wajib diisi.',
}),
});
module.exports = {
loginModel,
registerModel,
forgotPasswordModel,
resetPasswordModel,
};
+72
View File
@@ -0,0 +1,72 @@
const bcrypt = require('bcrypt');
const adminService = require('../../admin/services/admin.service');
const { createToken } = require('../../../middleware/verifyJWT');
const { data, error } = require('../../../helpers/utils/wrapper');
const { UnauthorizedError, NotFoundError } = require('../../../helpers/error');
class AuthService {
async login(email, password) {
try {
const result = await adminService.getAdminByEmail(email);
if (result.err || !result.data) {
return error(new UnauthorizedError('Email atau password tidak valid'));
}
const admin = result.data;
const isPasswordValid = await bcrypt.compare(password, admin.password);
if (!isPasswordValid) {
return error(new UnauthorizedError('Email atau password tidak valid'));
}
const token = createToken({
id: admin.id.toString(),
email: admin.email,
role: admin.role,
signature: admin.signature
});
return data({
token,
admin: {
id: admin.id.toString(),
nama_depan: admin.nama_depan,
nama_belakang: admin.nama_belakang,
email: admin.email,
role: admin.role,
signature: admin.signature,
},
});
} catch (err) {
return error(err);
}
}
async getCurrentUser(userId) {
try {
const result = await adminService.getAdminById(userId);
if (result.err) {
return result;
}
const { password, ...adminWithoutPassword } = result.data;
return data(adminWithoutPassword);
} catch (err) {
return error(new NotFoundError('Pengguna tidak ditemukan'));
}
}
generateToken(payload) {
try {
const token = createToken(payload);
return data(token);
} catch (err) {
return error(err);
}
}
}
module.exports = new AuthService();