refactor: rewrite ke codebase lama
This commit is contained in:
+72
@@ -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();
|
||||
Executable
+7
@@ -0,0 +1,7 @@
|
||||
const authController = require('./controllers/auth.controller');
|
||||
const authService = require('./services/auth.service');
|
||||
|
||||
module.exports = {
|
||||
authController,
|
||||
authService
|
||||
};
|
||||
Executable
+74
@@ -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,
|
||||
};
|
||||
Executable
+72
@@ -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();
|
||||
Reference in New Issue
Block a user