Merge branch 'main' into feat/admin-project-lms

This commit is contained in:
Rafi Athallah
2026-06-14 20:28:48 +07:00
committed by GitHub
20 changed files with 2992 additions and 12 deletions
@@ -58,6 +58,27 @@ class ProjectService {
}
}
const userIds = users.map((user) => user.id);
if (userIds.length > 0) {
const activeMemberships = await projectRepository.findActiveMembershipsByUserIds(userIds);
if (activeMemberships.length > 0) {
const assignedInterns = activeMemberships.map((membership) => {
const email = membership.user?.email || "unknown email";
const projectName = membership.project?.project_name || "Unknown Project";
return `${email} already assigned to ${projectName}`;
});
return error(
new ConflictError(
`One or more interns already have an active project: ${assignedInterns.join(", ")}`
)
);
}
}
const newProjectData = {
id_admin: parseInt(actor.id),
project_icon: projectData.project_icon,
@@ -68,7 +89,6 @@ class ProjectService {
status: "active",
};
const userIds = users.map((user) => user.id);
const project = await projectRepository.createWithMembers(
newProjectData,
userIds,
@@ -446,7 +466,7 @@ class ProjectService {
const activeMembership = intern.project_members?.[0] || null;
const projectName = activeMembership?.project?.project_name || "Unassigned";
const role = intern.lamaran_magang?.lowongan_magang?.posisi || "-";
return {
id: intern.id,
name: intern.full_name,
@@ -482,19 +502,16 @@ class ProjectService {
return error(new BadRequestError("Project ID and User ID are required"));
}
// Check if project exists
const project = await projectRepository.findById(id_project);
if (!project) {
return error(new NotFoundError("Project not found"));
}
// Check if user exists and is active
const user = await projectRepository.findUserByIdAndActive(id_user);
if (!user) {
return error(new NotFoundError("User not found or inactive"));
}
// Check if already a member of this project
const existingMembership = await projectRepository.findMembership(id_project, id_user);
let membership;
@@ -502,10 +519,8 @@ class ProjectService {
if (existingMembership.status === 'active') {
return error(new ConflictError("User is already an active member of this project"));
}
// Reactivate membership
membership = await projectRepository.updateMembershipStatus(existingMembership.id, 'active');
} else {
// Create new membership
membership = await projectRepository.assignMember(id_project, id_user);
}