From 9efe1aded7f49e3ee7ff669e244063d0b11a3fb6 Mon Sep 17 00:00:00 2001 From: Matthieu Haineault Date: Mon, 2 Mar 2026 13:07:11 -0500 Subject: [PATCH] fix(ticket-list): added an order by reflecting the business needs --- .../services/get-ticket-list.service.ts | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/src/customer-support/tickets/services/get-ticket-list.service.ts b/src/customer-support/tickets/services/get-ticket-list.service.ts index 730eac6..a8f5cd3 100644 --- a/src/customer-support/tickets/services/get-ticket-list.service.ts +++ b/src/customer-support/tickets/services/get-ticket-list.service.ts @@ -25,7 +25,9 @@ export class GetTicketListService { where: { email }, }); if (!staff) return { success: false, error: 'EMPLOYEE_NOT_FOUND' } - if (!sortOrders.includes(sortOrder) || !sortTypes.includes(sortType)) return { success: false, error: 'INVALID_FILTER' } + if (!sortOrders.includes(sortOrder) || !sortTypes.includes(sortType)) { + return { success: false, error: 'INVALID_FILTER' } + } const statusList = Prisma.join(status); @@ -58,9 +60,17 @@ export class GetTicketListService { LEFT JOIN ticket t ON t.assign_to = s.id LEFT JOIN account a ON t.account_id = a.id LEFT JOIN ticket_dept d ON t.dept_id = d.id - WHERE s.id = ${staff.id} - AND t.status IN (${statusList}) + + WHERE t.status IN (${statusList}) ORDER BY ${Prisma.raw(sortOrder)} ${Prisma.raw(sortType)} + CASE + WHEN t.status = 'open' AND t.assign_to = 0 THEN 0 + WHEN t.status = 'open' AND t.assign_to = ${staff.id} THEN 1 + WHEN t.status = 'pending' AND t.assign_to = ${staff.id} THEN 2 + WHEN t.status = 'open' AND t.assign_to != ${staff.id} THEN 3 + WHEN t.status = 'pending' AND t.assign_to != ${staff.id} THEN 4 + ELSE 5 + END LIMIT ${limit} OFFSET ${offset} `); @@ -110,16 +120,15 @@ export class GetTicketListService { FROM staff s LEFT JOIN ticket t ON t.assign_to = s.id LEFT JOIN account a ON t.account_id = a.id - LEFT JOIN ticket_dept d ON t.dept_id = d.id - WHERE s.id = ${staff.id} + LEFT JOIN ticket_dept d ON t.dept_id = d.i ORDER BY CASE - WHEN t.status = 'open' AND t.assign_to = 0 THEN 0 - WHEN t.status = 'open' AND t.assign_to = s.id THEN 1 - WHEN t.status = 'pending' AND t.assign_to = s.id THEN 2 - WHEN t.status = 'open' AND t.assign_to != s.id THEN 3 - WHEN t.status = 'pending' AND t.assign_to != s.id THEN 4 - ELSE 5 + WHEN t.status = 'open' AND t.assign_to = 0 THEN 0 + WHEN t.status = 'open' AND t.assign_to = ${staff.id} THEN 1 + WHEN t.status = 'pending' AND t.assign_to = ${staff.id} THEN 2 + WHEN t.status = 'open' AND t.assign_to != ${staff.id} THEN 3 + WHEN t.status = 'pending' AND t.assign_to != ${staff.id} THEN 4 + ELSE 5 END LIMIT ${limit} OFFSET ${offset}; `);