From f7ffcd09d4b4554faee81d654bb82f037a069059 Mon Sep 17 00:00:00 2001 From: Sherin Thomas Date: Wed, 19 Nov 2025 16:41:10 +0530 Subject: [PATCH 1/3] Update getInterviews apidoc --- src/routes/interviews.ts | 94 +++++++++++++++++++++++++++++----------- 1 file changed, 69 insertions(+), 25 deletions(-) diff --git a/src/routes/interviews.ts b/src/routes/interviews.ts index e87daf7..86323f7 100644 --- a/src/routes/interviews.ts +++ b/src/routes/interviews.ts @@ -5,31 +5,75 @@ import * as interviewCtrl from '../controllers/interview.controller'; export default function interviewRouter() { const router = express.Router(); - /** - * @api {get} /interviews Get all interview experiences - * @apiName getInterviews - * @apiGroup Interview - * - * @apiSuccess {Object[]} interviews List of all interview experiences - * @apiSuccessExample {json} Success-Response: - * HTTP/1.1 200 OK - * { - * "success": true, - * "data": [ - * { - * "id": 1, - * "company": "Google", - * "role": "SDE Intern", - * "verdict": "Selected", - * "content": "It was amazing...", - * "isAnonymous": false, - * "memberId": "uuid-string" - * } - * ] - * } - * - * @apiError (500) InternalServerError Failed to fetch interviews from the database - */ +/** + * @api {get} /interviews Get all interview experiences (Paginated + Optional Filtering) + * @apiName getInterviews + * @apiGroup Interview + * + * @apiDescription + * Fetches a paginated list of all interview experiences. + * Filtering by verdict is optional. + * + * - When `verdict=All` (default) → No filtering, return *all* interview experiences. + * - When `verdict=Selected/Rejected/Pending` → Filter by that verdict. + * + * + * @apiParam {Number{1..}} [page=1] Page number (must be >= 1) + * @apiParam {Number{1..100}} [limit=10] Number of records per page (1–100) + * @apiParam {String="All","Selected","Rejected","Pending"} [verdict="All"] + * If set to "All", no filtering is applied. + * + * + * @apiSuccess {Boolean} success Indicates success + * @apiSuccess {Object[]} data List of interview experiences (formatted) + * @apiSuccess {Number} page Current page number + * @apiSuccess {Number} limit Number of items per page + * @apiSuccess {String} verdict The applied verdict filter ("All" means no filtering) + * @apiSuccess {Number} total Total number of interviews matching the filter + * @apiSuccess {Number} totalPages Total number of pages + * + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "success": true, + * "data": [ + * { + * "id": 45, + * "company": "Google", + * "role": "SDE Intern", + * "verdict": "Selected", + * "content": "Great experience...", + * "isAnonymous": false, + * "member": { + * "id": "uuid-123", + * "name": "John Doe", + * "profilePhoto": "https://cdn.com/photo.jpg" + * } + * }, + * { + * "id": 42, + * "company": "Amazon", + * "role": "Backend Engineer", + * "verdict": "Rejected", + * "content": "Challenging rounds...", + * "isAnonymous": true + * // member not returned because isAnonymous = true + * } + * ], + * "page": 1, + * "limit": 10, + * "verdict": "All", + * "total": 240, + * "totalPages": 24 + * } + * + * + * @apiError (400) BadRequest Invalid page, limit, or verdict + * @apiError (500) InternalServerError Failed to fetch interviews from the database + */ + + router.get('/', interviewCtrl.getInterviews); From cb0ff6f66a2ac956708f726ff14ad44a7353d738 Mon Sep 17 00:00:00 2001 From: Harish-Naruto Date: Fri, 21 Nov 2025 14:43:00 +0530 Subject: [PATCH 2/3] fix issue with profile update --- src/controllers/member.controller.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/controllers/member.controller.ts b/src/controllers/member.controller.ts index c89ff64..525854f 100644 --- a/src/controllers/member.controller.ts +++ b/src/controllers/member.controller.ts @@ -74,7 +74,7 @@ export const updateAMember = (supabase: SupabaseClient) => async (req: Request, res: Response) => { const { memberId } = req.params; - + if(!memberId) throw new ApiError("No memberId provided", 400); const parsedBody = JSON.parse(req.body.memberData); @@ -84,7 +84,7 @@ export const updateAMember = const oldData = await memberService.getDetails(memberId); const oldImage = oldData?.profilePhoto; - if(oldImage) await uploadImage(supabase, req.file, "members", oldImage); + if(oldImage) imageUrl = await uploadImage(supabase, req.file, "members", oldImage); else imageUrl = await uploadImage(supabase, req.file, "members"); } if (imageUrl) parsedBody.profilePhoto = imageUrl; @@ -155,4 +155,4 @@ export const getUserInterviews = async (req: Request, res: Response) => { const interviews = await memberService.getInterviews(memberId); res.status(200).json({ success: true, interviews }); -}; \ No newline at end of file +}; From a2c06a449138744c6d3c7c2fc523867f17f03c6f Mon Sep 17 00:00:00 2001 From: Sherin Thomas Date: Fri, 21 Nov 2025 17:42:18 +0530 Subject: [PATCH 3/3] Update updateMember test --- tests/Member.test.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/Member.test.ts b/tests/Member.test.ts index 9774144..d80f545 100644 --- a/tests/Member.test.ts +++ b/tests/Member.test.ts @@ -180,8 +180,10 @@ describe('Member Controller - updateAMember', () => { ); expect(memberService.updateMember).toHaveBeenCalledWith('abc-123', { + profilePhoto: 'https://new.url/image.png', }); + expect(res.status).toHaveBeenCalledWith(200); expect(res.json).toHaveBeenCalledWith({ success: true,