feat(project): implement filter multi status pada get all projects
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user