Skip to content

Commit d8a2086

Browse files
committed
Add Pagination to interviews route
1 parent ea2ffee commit d8a2086

2 files changed

Lines changed: 43 additions & 9 deletions

File tree

src/controllers/interview.controller.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,22 @@ import * as interviewService from "../services/interview.service";
33
import { ApiError } from "../utils/apiError";
44

55
export const getInterviews = async (req: Request, res: Response) => {
6-
const interviews = await interviewService.getInterviews();
6+
const page = parseInt(req.query.page as string) || 1;
7+
const limit = parseInt(req.query.limit as string) || 10;
78

8-
res.status(200).json({
9+
const { interviews, total } = await interviewService.getInterviews(page, limit);
10+
11+
return res.status(200).json({
912
success: true,
10-
data: interviews,
13+
data: interviews,
14+
page,
15+
limit,
16+
total,
17+
totalPages: Math.ceil(total / limit),
1118
});
1219
};
1320

21+
1422
export const getInterviewById = async (req: Request, res: Response) => {
1523
const interviewId = parseInt(req.params.id);
1624

src/services/interview.service.ts

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,39 @@
11
import { prisma } from "../db/client"
22

3-
export const getInterviews = async () => {
4-
return await prisma.interviewExperience.findMany({
5-
orderBy: {
6-
id: "desc",
7-
},
8-
});
3+
export const getInterviews = async (page: number = 1, limit: number = 10) => {
4+
const skip = (page - 1) * limit;
5+
6+
const [interviews, total] = await Promise.all([
7+
prisma.interviewExperience.findMany({
8+
skip,
9+
take: limit,
10+
include: {
11+
member: {
12+
select: {
13+
id: true,
14+
name: true,
15+
profilePhoto: true,
16+
},
17+
},
18+
},
19+
orderBy: {
20+
id: "desc",
21+
},
22+
}),
23+
24+
prisma.interviewExperience.count(),
25+
]);
26+
27+
const formattedInterview = interviews.map(
28+
({ isAnonymous, member, memberId, ...rest }) => {
29+
return isAnonymous ? {...rest,isAnonymous} : { ...rest,isAnonymous, member };
30+
}
31+
);
32+
33+
return { interviews : formattedInterview , total };
934
};
1035

36+
1137
export const getInterviewById = async (interviewId: number) => {
1238
return await prisma.interviewExperience.findUnique({
1339
where: {

0 commit comments

Comments
 (0)