diff --git a/src/controllers/interview.controller.ts b/src/controllers/interview.controller.ts index 3b09e6d..60e17a9 100644 --- a/src/controllers/interview.controller.ts +++ b/src/controllers/interview.controller.ts @@ -5,6 +5,8 @@ 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"; + const validVerdicts = ["All", "Selected", "Rejected", "Pending"] if(isNaN(page) || page<1){ throw new ApiError("Page must be greater than or equal to 1",400); @@ -12,14 +14,18 @@ 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); + 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..91f7216 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: { @@ -21,7 +27,7 @@ export const getInterviews = async (page: number = 1, limit: number = 10) => { }, }), - prisma.interviewExperience.count(), + prisma.interviewExperience.count({where}), ]); const formattedInterviews = interviews.map( 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 = {