fix: assign member hanya intern yg gk ada active project
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -267,50 +267,6 @@ router.get('/detail/:id', verifyJWT, certificateController.getCertificateDetail)
|
||||
* description: Internal server error
|
||||
*/
|
||||
router.get('/project/:id_project', verifyJWT, isAdmin, certificateController.getProjectCertificates);
|
||||
|
||||
/**
|
||||
* @swagger
|
||||
* /certificate-api/verify:
|
||||
* get:
|
||||
* summary: Verify a certificate (Public)
|
||||
* description: Verify the validity of a certificate number publicly without authentication.
|
||||
* tags: [Certificate]
|
||||
* parameters:
|
||||
* - in: query
|
||||
* name: certificate_no
|
||||
* schema:
|
||||
* type: string
|
||||
* required: true
|
||||
* description: The certificate number to verify
|
||||
* example: "CERT/20260609/PRJ2/USR5"
|
||||
* responses:
|
||||
* 200:
|
||||
* description: Certificate is valid
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* type: object
|
||||
* properties:
|
||||
* status:
|
||||
* type: boolean
|
||||
* example: true
|
||||
* data:
|
||||
* $ref: '#/components/schemas/Certificate'
|
||||
* message:
|
||||
* type: string
|
||||
* example: "Certificate validated successfully"
|
||||
* code:
|
||||
* type: integer
|
||||
* example: 200
|
||||
* 400:
|
||||
* description: Bad request (missing certificate number)
|
||||
* 404:
|
||||
* description: Certificate not found or invalid
|
||||
* 500:
|
||||
* description: Internal server error
|
||||
*/
|
||||
router.get('/verify', certificateController.verifyCertificate);
|
||||
|
||||
/**
|
||||
* @swagger
|
||||
* /certificate-api/verify-uuid/{uuid}:
|
||||
|
||||
Reference in New Issue
Block a user