From 054fe2b7af6c5dec7dcaaa9412d77f516099be61 Mon Sep 17 00:00:00 2001 From: falendikategar Date: Thu, 31 Oct 2024 14:41:07 +0700 Subject: [PATCH] update: Adding data filters to match the status to be displayed in assessment request management --- .../assessmentRequestManagement/route.ts | 53 +++++++++++-------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/apps/backend/src/routes/assessmentRequestManagement/route.ts b/apps/backend/src/routes/assessmentRequestManagement/route.ts index 3b1aa99..32e923d 100644 --- a/apps/backend/src/routes/assessmentRequestManagement/route.ts +++ b/apps/backend/src/routes/assessmentRequestManagement/route.ts @@ -1,4 +1,4 @@ -import { and, eq, ilike, or, sql, asc } from "drizzle-orm"; +import { and, eq, ilike, or, sql, asc, inArray } from "drizzle-orm"; import { Hono } from "hono"; import checkPermission from "../../middlewares/checkPermission"; import { z } from "zod"; @@ -48,6 +48,13 @@ const assessmentsRequestManagementRoutes = new Hono() ), async (c) => { const { page, limit, q } = c.req.valid("query"); + + const validStatuses = [ + "dalam pengerjaan", + "menunggu konfirmasi", + "diterima", + "ditolak", + ] as ("menunggu konfirmasi" | "diterima" | "ditolak" | "dalam pengerjaan")[]; // Query untuk menghitung total jumlah item (totalCountQuery) const assessmentCountQuery = await db @@ -58,14 +65,17 @@ const assessmentsRequestManagementRoutes = new Hono() .leftJoin(respondents, eq(assessments.respondentId, respondents.id)) .leftJoin(users, eq(respondents.userId, users.id)) .where( - q - ? or( - ilike(users.name, `%${q}%`), - ilike(respondents.companyName, `%${q}%`), - sql`CAST(${assessments.status} AS TEXT) ILIKE ${'%' + q + '%'}`, - eq(assessments.id, q) + and( + inArray(assessments.status, validStatuses), + q + ? or( + ilike(users.name, `%${q}%`), + ilike(respondents.companyName, `%${q}%`), + sql`CAST(${assessments.status} AS TEXT) ILIKE ${'%' + q + '%'}`, + eq(assessments.id, q) + ) + : undefined ) - : undefined ); const totalItems = Number(assessmentCountQuery[0]?.count) || 0; @@ -83,25 +93,26 @@ const assessmentsRequestManagementRoutes = new Hono() .leftJoin(respondents, eq(assessments.respondentId, respondents.id)) .leftJoin(users, eq(respondents.userId, users.id)) .where( - q - ? or( - ilike(users.name, `%${q}%`), - ilike(respondents.companyName, `%${q}%`), - sql`CAST(${assessments.status} AS TEXT) ILIKE ${'%' + q + '%'}`, - eq(assessments.id, q) + and( + inArray(assessments.status, validStatuses), + q + ? or( + ilike(users.name, `%${q}%`), + ilike(respondents.companyName, `%${q}%`), + sql`CAST(${assessments.status} AS TEXT) ILIKE ${'%' + q + '%'}`, + eq(assessments.id, q) + ) + : undefined ) - : undefined ) .orderBy( sql` CASE WHEN ${assessments.status} = 'menunggu konfirmasi' THEN 1 - WHEN ${assessments.status} = 'diterima' THEN 2 - WHEN ${assessments.status} = 'ditolak' THEN 3 - WHEN ${assessments.status} = 'dalam pengerjaan' THEN 4 - WHEN ${assessments.status} = 'belum diverifikasi' THEN 5 - WHEN ${assessments.status} = 'selesai' THEN 6 - ELSE 8 + WHEN ${assessments.status} = 'dalam pengerjaan' THEN 2 + WHEN ${assessments.status} = 'diterima' THEN 3 + WHEN ${assessments.status} = 'ditolak' THEN 4 + ELSE 5 END `, asc(assessments.createdAt)