feat: nambahin certificate system

This commit is contained in:
Rafi Athallah
2026-06-09 22:14:27 +07:00
parent edc287968d
commit 7e6b56fbe0
10 changed files with 951 additions and 8 deletions
@@ -0,0 +1,177 @@
const certificateService = require('../services/certificate.service');
const { response, error } = require('../../../helpers/utils/wrapper');
const { SUCCESS, ERROR } = require('../../../helpers/http-status/status_code');
const { InternalServerError } = require('../../../helpers/error');
const { isValidPayload } = require('../../../helpers/utils/validator');
const { claimCertificateModel } = require('../models/certificate.model');
const getActor = (req) => ({
id: req.id,
role: req.role,
email: req.email,
});
class CertificateController {
async claimCertificate(req, res) {
try {
const validatePayload = isValidPayload(req.body, claimCertificateModel);
if (validatePayload.err) {
return response(
res,
'fail',
{ err: validatePayload.err, data: null },
'Data claim certificate tidak valid',
ERROR.EXPECTATION_FAILED
);
}
const actor = getActor(req);
const result = await certificateService.claimCertificate(validatePayload.data, actor);
if (result.err) {
return response(res, 'fail', result);
}
return response(res, 'success', result, 'Certificate claimed successfully', SUCCESS.CREATED);
} catch (err) {
return response(
res,
'fail',
error(new InternalServerError(err.message)),
'Unexpected error occurred',
ERROR.INTERNAL_ERROR
);
}
}
async getMyCertificates(req, res) {
try {
const actor = getActor(req);
const result = await certificateService.getMyCertificates(actor);
if (result.err) {
return response(res, 'fail', result);
}
return response(res, 'success', result, 'Certificates retrieved successfully', SUCCESS.OK);
} catch (err) {
return response(
res,
'fail',
error(new InternalServerError(err.message)),
'Unexpected error occurred',
ERROR.INTERNAL_ERROR
);
}
}
async getCertificateDetail(req, res) {
try {
const { id } = req.params;
const actor = getActor(req);
const result = await certificateService.getCertificateDetail(id, actor);
if (result.err) {
return response(res, 'fail', result);
}
return response(res, 'success', result, 'Certificate details retrieved successfully', SUCCESS.OK);
} catch (err) {
return response(
res,
'fail',
error(new InternalServerError(err.message)),
'Unexpected error occurred',
ERROR.INTERNAL_ERROR
);
}
}
async getProjectCertificates(req, res) {
try {
const { id_project } = req.params;
const actor = getActor(req);
const result = await certificateService.getProjectCertificates(id_project, actor);
if (result.err) {
return response(res, 'fail', result);
}
return response(res, 'success', result, 'Project certificates retrieved successfully', SUCCESS.OK);
} catch (err) {
return response(
res,
'fail',
error(new InternalServerError(err.message)),
'Unexpected error occurred',
ERROR.INTERNAL_ERROR
);
}
}
async getAllCertificates(req, res) {
try {
const actor = getActor(req);
const result = await certificateService.getAllCertificates(actor);
if (result.err) {
return response(res, 'fail', result);
}
return response(res, 'success', result, 'All certificates retrieved successfully', SUCCESS.OK);
} catch (err) {
return response(
res,
'fail',
error(new InternalServerError(err.message)),
'Unexpected error occurred',
ERROR.INTERNAL_ERROR
);
}
}
async verifyCertificate(req, res) {
try {
const certificate_no = req.query.certificate_no || req.params.certificate_no;
const result = await certificateService.verifyCertificate(certificate_no);
if (result.err) {
return response(res, 'fail', result);
}
return response(res, 'success', result, 'Certificate validated successfully', SUCCESS.OK);
} catch (err) {
return response(
res,
'fail',
error(new InternalServerError(err.message)),
'Unexpected error occurred',
ERROR.INTERNAL_ERROR
);
}
}
async verifyCertificateByUuid(req, res) {
try {
const { uuid } = req.params;
const result = await certificateService.verifyCertificateByUuid(uuid);
if (result.err) {
return response(res, 'fail', result);
}
return response(res, 'success', result, 'Certificate validated successfully', SUCCESS.OK);
} catch (err) {
return response(
res,
'fail',
error(new InternalServerError(err.message)),
'Unexpected error occurred',
ERROR.INTERNAL_ERROR
);
}
}
}
module.exports = new CertificateController();