From 0ee154663d9e5cd887749cec04144d73bdbb23d9 Mon Sep 17 00:00:00 2001 From: Sherin Thomas Date: Mon, 17 Nov 2025 14:03:18 +0530 Subject: [PATCH 1/4] Add filters based on the interview verdict --- src/controllers/interview.controller.ts | 4 +++- src/services/interview.service.ts | 8 +++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/controllers/interview.controller.ts b/src/controllers/interview.controller.ts index 3b09e6d..8acf6b4 100644 --- a/src/controllers/interview.controller.ts +++ b/src/controllers/interview.controller.ts @@ -5,6 +5,7 @@ import { ApiError } from "../utils/apiError"; export const getInterviews = async (req: Request, res: Response) => { const page = parseInt(req.query.page as string) || 1; const limit = parseInt(req.query.limit as string) || 10; + const verdict = (req.query.verdict as string) || "All"; if(isNaN(page) || page<1){ throw new ApiError("Page must be greater than or equal to 1",400); @@ -13,13 +14,14 @@ export const getInterviews = async (req: Request, res: Response) => { throw new ApiError("Limit must be between 1 to 100",400) } - const { interviews, total } = await interviewService.getInterviews(page, limit); + const { interviews, total } = await interviewService.getInterviews(page, limit, verdict); return res.status(200).json({ success: true, data: interviews, page, limit, + verdict, total, totalPages: Math.ceil(total / limit), }); diff --git a/src/services/interview.service.ts b/src/services/interview.service.ts index df0664c..c0dbda7 100644 --- a/src/services/interview.service.ts +++ b/src/services/interview.service.ts @@ -1,10 +1,16 @@ import { prisma } from "../db/client" -export const getInterviews = async (page: number = 1, limit: number = 10) => { +export const getInterviews = async (page: number = 1, limit: number = 10, verdict : string = "All") => { const skip = (page - 1) * limit; + const where : any = {} + if(verdict !== "All"){ + where.verdict = verdict + } + const [interviews, total] = await Promise.all([ prisma.interviewExperience.findMany({ + where, skip, take: limit, include: { From 41f6693e27173681d59fb99877ccc116b9a7c7ed Mon Sep 17 00:00:00 2001 From: Sherin Thomas Date: Mon, 17 Nov 2025 14:04:24 +0530 Subject: [PATCH 2/4] Update Interview tests' --- tests/Interview.test.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/Interview.test.ts b/tests/Interview.test.ts index 5feca84..114f3bd 100644 --- a/tests/Interview.test.ts +++ b/tests/Interview.test.ts @@ -49,12 +49,14 @@ describe('getInterviews', () => { data: mockInterviews, page: 1, limit: 10, + verdict: "All", total: 1, totalPages: Math.ceil(1 / 10), }); }); }); + describe('getInterviewById', () => { it('should return 200 and the interview if found', async () => { const req: any = { From 2160f06eeedc79e75141a55212cc225763c02fa5 Mon Sep 17 00:00:00 2001 From: Sherin Thomas Date: Mon, 17 Nov 2025 15:11:42 +0530 Subject: [PATCH 3/4] Add some checks for verdict --- src/controllers/interview.controller.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/controllers/interview.controller.ts b/src/controllers/interview.controller.ts index 8acf6b4..60e17a9 100644 --- a/src/controllers/interview.controller.ts +++ b/src/controllers/interview.controller.ts @@ -6,6 +6,7 @@ export const getInterviews = async (req: Request, res: Response) => { const page = parseInt(req.query.page as string) || 1; const limit = parseInt(req.query.limit as string) || 10; const verdict = (req.query.verdict as string) || "All"; + const validVerdicts = ["All", "Selected", "Rejected", "Pending"] if(isNaN(page) || page<1){ throw new ApiError("Page must be greater than or equal to 1",400); @@ -13,6 +14,9 @@ export const getInterviews = async (req: Request, res: Response) => { if(isNaN(limit) || limit<1 || limit>100){ throw new ApiError("Limit must be between 1 to 100",400) } + if(!validVerdicts.includes(verdict)){ + throw new ApiError("Invalid verdict",400); + } const { interviews, total } = await interviewService.getInterviews(page, limit, verdict); From 574cd0663798246e67bc15e352ca9453ecb2d15f Mon Sep 17 00:00:00 2001 From: Sherin Thomas Date: Mon, 17 Nov 2025 15:33:41 +0530 Subject: [PATCH 4/4] Add total pages count based on the verdict --- src/services/interview.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/interview.service.ts b/src/services/interview.service.ts index c0dbda7..91f7216 100644 --- a/src/services/interview.service.ts +++ b/src/services/interview.service.ts @@ -27,7 +27,7 @@ export const getInterviews = async (page: number = 1, limit: number = 10, verdic }, }), - prisma.interviewExperience.count(), + prisma.interviewExperience.count({where}), ]); const formattedInterviews = interviews.map(