fix: assign member hanya intern yg gk ada active project

This commit is contained in:
Rafi Athallah
2026-06-27 18:12:42 +07:00
parent 8145b0afc0
commit ccf192a14d
5 changed files with 201 additions and 85 deletions
@@ -131,27 +131,6 @@ class CertificateController {
}
}
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;
@@ -160,23 +160,6 @@ class CertificateService {
}
}
async verifyCertificate(certificate_no) {
try {
if (!certificate_no) {
return error(new BadRequestError('Certificate number is required'));
}
const certificate = await certificateRepository.findByCertificateNo(certificate_no);
if (!certificate) {
return error(new NotFoundError('Certificate not found or invalid'));
}
return data(this.mapCertificate(certificate));
} catch (err) {
return error(err);
}
}
async verifyCertificateByUuid(uuid) {
try {
if (!uuid) {
@@ -547,13 +547,30 @@ class ProjectService {
return error(new NotFoundError("User not found or inactive"));
}
if (user.role !== "intern") {
return error(
new ForbiddenError("Access denied: only interns can be assigned to projects")
);
}
const activeMemberships = await projectRepository.findActiveMembershipsByUserIds([id_user]);
if (activeMemberships.length > 0) {
const activeProj = activeMemberships[0].project;
if (activeMemberships[0].id_project === parseInt(id_project)) {
return error(new ConflictError("User is already an active member of this project"));
} else {
return error(
new ConflictError(
`User is already an active member of another project: ${activeProj?.project_name || "Unknown Project"}`
)
);
}
}
const existingMembership = await projectRepository.findMembership(id_project, id_user);
let membership;
if (existingMembership) {
if (existingMembership.status === 'active') {
return error(new ConflictError("User is already an active member of this project"));
}
membership = await projectRepository.updateMembershipStatus(existingMembership.id, 'active');
} else {
membership = await projectRepository.assignMember(id_project, id_user);