refactor: rewrite ke codebase lama
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
const partnershipService = require('../services/partnership.service');
|
||||
const { response, error } = require('../../../helpers/utils/wrapper');
|
||||
const { InternalServerError } = require('../../../helpers/error');
|
||||
const { SUCCESS, ERROR } = require('../../../helpers/http-status/status_code');
|
||||
const { isValidPayload } = require('../../../helpers/utils/validator');
|
||||
const { createPartnershipModel, updatePartnershipModel } = require('../models/partnership.model');
|
||||
const { deleteFileIfExists } = require('../../../helpers/utils/fileHelper');
|
||||
|
||||
class PartnershipController {
|
||||
async addPartnership(req, res) {
|
||||
try {
|
||||
const image = req.file;
|
||||
|
||||
const validatePayload = isValidPayload(req.body, createPartnershipModel);
|
||||
|
||||
if (validatePayload.err) {
|
||||
if (image?.filename) {
|
||||
await deleteFileIfExists(image.filename);
|
||||
}
|
||||
return response(
|
||||
res,
|
||||
'fail',
|
||||
{ err: validatePayload.err, data: null },
|
||||
'Data tidak valid',
|
||||
ERROR.EXPECTATION_FAILED
|
||||
);
|
||||
}
|
||||
|
||||
const { nama_partner } = validatePayload.data;
|
||||
const result = await partnershipService.createPartnership(nama_partner, image);
|
||||
|
||||
if (result.err) {
|
||||
return response(res, 'fail', result);
|
||||
}
|
||||
|
||||
return response(res, 'success', result, 'Data partnership berhasil ditambahkan', SUCCESS.CREATED);
|
||||
} catch (err) {
|
||||
if (req.file?.filename) {
|
||||
await deleteFileIfExists(req.file.filename);
|
||||
}
|
||||
return response(res, 'fail', error(new InternalServerError(err.message)), 'Terjadi kesalahan yang tidak terduga', ERROR.INTERNAL_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
async getPartnership(req, res) {
|
||||
try {
|
||||
const result = await partnershipService.getAllPartnerships();
|
||||
|
||||
if (result.err) {
|
||||
return response(res, 'fail', result);
|
||||
}
|
||||
|
||||
return response(res, 'success', result, 'Data partnership berhasil diambil', SUCCESS.OK);
|
||||
} catch (err) {
|
||||
return response(res, 'fail', error(new InternalServerError(err.message)), 'Terjadi kesalahan yang tidak terduga', ERROR.INTERNAL_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
async getPartnershipById(req, res) {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
|
||||
const result = await partnershipService.getPartnershipById(id);
|
||||
|
||||
if (result.err) {
|
||||
return response(res, 'fail', result);
|
||||
}
|
||||
|
||||
return response(res, 'success', result, 'Data partnership berhasil diambil', SUCCESS.OK);
|
||||
} catch (err) {
|
||||
return response(res, 'fail', error(new InternalServerError(err.message)), 'Terjadi kesalahan yang tidak terduga', ERROR.INTERNAL_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
async updatePartnership(req, res) {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
const image = req.file;
|
||||
|
||||
const validatePayload = isValidPayload(req.body, updatePartnershipModel);
|
||||
|
||||
if (validatePayload.err) {
|
||||
if (image?.filename) {
|
||||
await deleteFileIfExists(image.filename);
|
||||
}
|
||||
return response(
|
||||
res,
|
||||
'fail',
|
||||
{ err: validatePayload.err, data: null },
|
||||
'Data tidak valid',
|
||||
ERROR.EXPECTATION_FAILED
|
||||
);
|
||||
}
|
||||
|
||||
const { nama_partner } = validatePayload.data;
|
||||
const result = await partnershipService.updatePartnership(id, nama_partner, image);
|
||||
|
||||
if (result.err) {
|
||||
return response(res, 'fail', result);
|
||||
}
|
||||
|
||||
return response(res, 'success', result, 'Data partnership berhasil diperbarui', SUCCESS.OK);
|
||||
} catch (err) {
|
||||
if (req.file?.filename) {
|
||||
await deleteFileIfExists(req.file.filename);
|
||||
}
|
||||
return response(res, 'fail', error(new InternalServerError(err.message)), 'Terjadi kesalahan yang tidak terduga', ERROR.INTERNAL_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
async deletePartnership(req, res) {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
|
||||
const result = await partnershipService.deletePartnership(id);
|
||||
|
||||
if (result.err) {
|
||||
return response(res, 'fail', result);
|
||||
}
|
||||
|
||||
return response(res, 'success', result, 'Data partnership berhasil dihapus', SUCCESS.OK);
|
||||
} catch (err) {
|
||||
return response(res, 'fail', error(new InternalServerError(err.message)), 'Terjadi kesalahan yang tidak terduga', ERROR.INTERNAL_ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new PartnershipController();
|
||||
Executable
+9
@@ -0,0 +1,9 @@
|
||||
const partnershipController = require('./controllers/partnership.controller');
|
||||
const partnershipService = require('./services/partnership.service');
|
||||
const partnershipRepository = require('./repositories/partnership.repository');
|
||||
|
||||
module.exports = {
|
||||
partnershipController,
|
||||
partnershipService,
|
||||
partnershipRepository
|
||||
};
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
const joi = require('joi');
|
||||
|
||||
const createPartnershipModel = joi.object().keys({
|
||||
nama_partner: joi.string().max(255).required().messages({
|
||||
'string.base': 'Nama partner harus berupa teks.',
|
||||
'string.empty': 'Nama partner tidak boleh kosong.',
|
||||
'string.max': 'Nama partner maksimal {#limit} karakter.',
|
||||
'any.required': 'Nama partner wajib diisi.',
|
||||
}),
|
||||
|
||||
image_path: joi.string().optional().allow('', null).messages({
|
||||
'string.base': 'Path gambar harus berupa teks.',
|
||||
}),
|
||||
});
|
||||
|
||||
const updatePartnershipModel = joi.object().keys({
|
||||
nama_partner: joi.string().max(255).optional().messages({
|
||||
'string.base': 'Nama partner harus berupa teks.',
|
||||
'string.max': 'Nama partner maksimal {#limit} karakter.',
|
||||
}),
|
||||
|
||||
image_path: joi.string().optional().allow('', null).messages({
|
||||
'string.base': 'Path gambar harus berupa teks.',
|
||||
}),
|
||||
});
|
||||
|
||||
module.exports = {
|
||||
createPartnershipModel,
|
||||
updatePartnershipModel,
|
||||
};
|
||||
@@ -0,0 +1,34 @@
|
||||
const prisma = require('../../../helpers/db/db_connection');
|
||||
|
||||
class PartnershipRepository {
|
||||
async create(partnershipData) {
|
||||
return prisma.partnership.create({
|
||||
data: partnershipData,
|
||||
});
|
||||
}
|
||||
|
||||
async findAll() {
|
||||
return prisma.partnership.findMany();
|
||||
}
|
||||
|
||||
async findById(id) {
|
||||
return prisma.partnership.findUnique({
|
||||
where: { id: parseInt(id) },
|
||||
});
|
||||
}
|
||||
|
||||
async updateById(id, partnershipData) {
|
||||
return prisma.partnership.update({
|
||||
where: { id: parseInt(id) },
|
||||
data: partnershipData,
|
||||
});
|
||||
}
|
||||
|
||||
async deleteById(id) {
|
||||
return prisma.partnership.delete({
|
||||
where: { id: parseInt(id) },
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new PartnershipRepository();
|
||||
+121
@@ -0,0 +1,121 @@
|
||||
const partnershipRepository = require('../repositories/partnership.repository');
|
||||
const path = require('path');
|
||||
const { deleteFileIfExists } = require('../../../helpers/utils/fileHelper');
|
||||
const imageUploadHelper = require('../../../helpers/utils/imageUpload.helper');
|
||||
const { data, error } = require('../../../helpers/utils/wrapper');
|
||||
const { NotFoundError } = require('../../../helpers/error');
|
||||
|
||||
class PartnershipService {
|
||||
async createPartnership(nama_partner, imageFile) {
|
||||
try {
|
||||
const imagePath = imageUploadHelper.uploadImage(imageFile);
|
||||
|
||||
const partnershipData = {
|
||||
nama_partner,
|
||||
image_path: imagePath,
|
||||
};
|
||||
|
||||
const result = await partnershipRepository.create(partnershipData);
|
||||
return data(result);
|
||||
} catch (err) {
|
||||
if (imageFile?.filename) {
|
||||
try {
|
||||
await deleteFileIfExists(imageFile.filename);
|
||||
} catch (cleanupErr) {
|
||||
console.error('Failed to cleanup file:', cleanupErr);
|
||||
}
|
||||
}
|
||||
return error(err);
|
||||
}
|
||||
}
|
||||
|
||||
async getAllPartnerships() {
|
||||
try {
|
||||
const partnerships = await partnershipRepository.findAll();
|
||||
return data(partnerships);
|
||||
} catch (err) {
|
||||
return error(err);
|
||||
}
|
||||
}
|
||||
|
||||
async getPartnershipById(id) {
|
||||
try {
|
||||
const partnership = await partnershipRepository.findById(id);
|
||||
|
||||
if (!partnership) {
|
||||
return error(new NotFoundError('Partnership Tidak Ditemukan'));
|
||||
}
|
||||
|
||||
return data(partnership);
|
||||
} catch (err) {
|
||||
return error(err);
|
||||
}
|
||||
}
|
||||
|
||||
async updatePartnership(id, nama_partner, imageFile) {
|
||||
let oldImagePath = null;
|
||||
let newImageUploaded = false;
|
||||
|
||||
try {
|
||||
const checkResult = await this.getPartnershipById(id);
|
||||
if (checkResult.err) {
|
||||
return checkResult;
|
||||
}
|
||||
|
||||
const existingPartnership = checkResult.data;
|
||||
let imagePath = existingPartnership.image_path;
|
||||
|
||||
if (imageFile) {
|
||||
oldImagePath = existingPartnership.image_path;
|
||||
|
||||
imagePath = imageUploadHelper.uploadImage(imageFile);
|
||||
newImageUploaded = true;
|
||||
|
||||
if (oldImagePath) {
|
||||
const oldFileName = path.basename(oldImagePath);
|
||||
await deleteFileIfExists(oldFileName);
|
||||
}
|
||||
}
|
||||
|
||||
const partnershipData = {
|
||||
nama_partner,
|
||||
image_path: imagePath,
|
||||
};
|
||||
|
||||
const result = await partnershipRepository.updateById(id, partnershipData);
|
||||
return data(result);
|
||||
} catch (err) {
|
||||
if (newImageUploaded && imageFile?.filename) {
|
||||
try {
|
||||
await deleteFileIfExists(imageFile.filename);
|
||||
} catch (cleanupErr) {
|
||||
console.error('Failed to cleanup new file:', cleanupErr);
|
||||
}
|
||||
}
|
||||
return error(err);
|
||||
}
|
||||
}
|
||||
|
||||
async deletePartnership(id) {
|
||||
try {
|
||||
const checkResult = await this.getPartnershipById(id);
|
||||
if (checkResult.err) {
|
||||
return checkResult;
|
||||
}
|
||||
|
||||
const partnership = checkResult.data;
|
||||
|
||||
if (partnership.image_path) {
|
||||
const fileName = path.basename(partnership.image_path);
|
||||
await deleteFileIfExists(fileName);
|
||||
}
|
||||
|
||||
const result = await partnershipRepository.deleteById(id);
|
||||
return data(result);
|
||||
} catch (err) {
|
||||
return error(err);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new PartnershipService();
|
||||
Reference in New Issue
Block a user