feat(project): implement filter multi status pada get all projects

This commit is contained in:
Muhammad Zhafran Ilham
2026-06-28 01:10:17 +07:00
parent ab6ca1f7bf
commit b82174a1ae
4 changed files with 77 additions and 11 deletions
@@ -109,8 +109,13 @@ class ProjectService {
async getAllProjects(query = {}, actor = {}) {
try {
const statusFilter = this.parseProjectStatusFilter(query.status);
if (statusFilter.err) {
return statusFilter;
}
const projects = await projectRepository.findAll({
status: query.status,
statuses: statusFilter.data,
actor,
});
@@ -293,6 +298,40 @@ class ProjectService {
return new ForbiddenError("Access denied: invalid role");
}
parseProjectStatusFilter(rawStatus) {
if (!rawStatus) {
return data(null);
}
const allowedStatuses = ["active", "completed", "archived"];
const statuses = Array.isArray(rawStatus)
? rawStatus.flatMap((status) => String(status).split(","))
: String(rawStatus).split(",");
const cleanedStatuses = [
...new Set(
statuses
.map((status) => status.trim().toLowerCase())
.filter(Boolean)
),
];
const invalidStatuses = cleanedStatuses.filter(
(status) => !allowedStatuses.includes(status)
);
if (invalidStatuses.length > 0) {
return error(
new BadRequestError(
`Invalid project status: ${invalidStatuses.join(", ")}`
)
);
}
return data(cleanedStatuses);
}
normalizeEmails(emails = []) {
return [
...new Set(