From 4e25cd1816c9c36dc9e8ba12a70b0d95b79fd22d Mon Sep 17 00:00:00 2001 From: Jimmy Nguyen Date: Wed, 3 Apr 2024 17:07:01 -0700 Subject: [PATCH 1/4] feat: implement fetch user events route --- packages/server/routes/api/events.js | 78 +++++++++++++++++++++------- 1 file changed, 59 insertions(+), 19 deletions(-) diff --git a/packages/server/routes/api/events.js b/packages/server/routes/api/events.js index ff77063b..95076b7d 100644 --- a/packages/server/routes/api/events.js +++ b/packages/server/routes/api/events.js @@ -10,7 +10,10 @@ const { attendeeStatusValidator, } = require("../../validators/events"); const { guildIdValidator } = require("../../validators/guilds"); -const { userIdBodyValidator } = require("../../validators/users"); +const { + userIdValidator, + userIdBodyValidator, +} = require("../../validators/users"); const { validationResult, matchedData } = require("express-validator"); const DEFAULT_EVENT_LIMIT = 10; /** @@ -43,7 +46,7 @@ router.get( const events = await EventController.getEvents( eventLimit, action, - eventId + eventId, ); if (events.length === 0) { @@ -56,10 +59,10 @@ router.get( const firstEventId = events[0].eventId; const lastEventId = events[events.length - 1].eventId; const prevCursor = Buffer.from( - `${currentPage - 1}___prev___${firstEventId}` + `${currentPage - 1}___prev___${firstEventId}`, ).toString("base64"); const nextCursor = Buffer.from( - `${currentPage + 1}___next___${lastEventId}` + `${currentPage + 1}___next___${lastEventId}`, ).toString("base64"); // follow-up request, not first request to api route @@ -97,7 +100,7 @@ router.get( message: error.message, }); } - } + }, ); router.post( @@ -135,7 +138,7 @@ router.post( message: error.message, }); } - } + }, ); router.get( @@ -168,7 +171,7 @@ router.get( message: error.message, }); } - } + }, ); router.delete( @@ -203,7 +206,7 @@ router.delete( message: error.message, }); } - } + }, ); router.put( @@ -231,7 +234,7 @@ router.put( const updatedEvent = await EventController.updateEvent( eventId, - validatedData + validatedData, ); response.status(200).json({ @@ -249,7 +252,7 @@ router.put( }); return; } - } + }, ); router.get( @@ -266,9 +269,8 @@ router.get( } try { const { eventId } = matchedData(request); - const eventAttendeesData = await EventController.getEventAttendees( - eventId - ); + const eventAttendeesData = + await EventController.getEventAttendees(eventId); response.status(200).json({ status: "success", data: { @@ -281,7 +283,7 @@ router.get( message: error.message, }); } - } + }, ); router.get( @@ -309,7 +311,7 @@ router.get( //Should return a list of events from the guild that are upcoming and in ascending order const upcoming = await EventController.getUpcomingEvents( currDate, - guildId + guildId, ); response.status(200).json({ @@ -324,7 +326,7 @@ router.get( message: error.message, }); } - } + }, ); router.post( @@ -348,7 +350,7 @@ router.post( const eventAttendeeData = await EventController.updateAttendeeStatus( eventId, userId, - "CheckedIn" + "CheckedIn", ); response.status(200).json({ @@ -363,7 +365,7 @@ router.post( message: error.message, }); } - } + }, ); router.put( @@ -403,7 +405,45 @@ router.put( message: error.message, }); } - } + }, +); + +router.get( + "/events/:userId/upcoming", + AuthController.authenticate, + userIdValidator, + async (request, response) => { + const result = validationResult(request); + + // if validation result is not empty, errors occurred + if (!result.isEmpty()) { + response.status(400).json({ + status: "fail", + data: result.array(), + }); + return; + } + const currDate = new Date(); + + const data = matchedData(request); + const userId = data.userId; + + try { + const userEvents = await EventController.getUserEvents(currDate, userId); + + response.status(200).json({ + status: "success", + data: { + upcomingEvents: userEvents, + }, + }); + } catch (error) { + response.status(500).json({ + status: "error", + message: error.message, + }); + } + }, ); module.exports = router; From 7cc80a8d4b4c15f2dc9cb67a8d968f4c6edf7591 Mon Sep 17 00:00:00 2001 From: Jimmy Nguyen Date: Wed, 3 Apr 2024 17:51:07 -0700 Subject: [PATCH 2/4] feat: implement fetch user events controller --- packages/server/controllers/events.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/packages/server/controllers/events.js b/packages/server/controllers/events.js index b9df58b9..191501a7 100644 --- a/packages/server/controllers/events.js +++ b/packages/server/controllers/events.js @@ -206,6 +206,26 @@ async function addCheckInPoints(eventId, userId) { }); } +async function getUserEvents(currentDate, userId) { + const userEvents = await prisma.events.findMany({ + where: { + eventAttendees: { + some: { + userId: userId, + status: { + in: ["Interested", "Attending"], + }, + }, + }, + startDate: { gte: currentDate }, + }, + orderBy: { + startDate: "asc", + }, + }); + return userEvents; +} + module.exports = { getEvent, getEvents, @@ -217,4 +237,5 @@ module.exports = { getUpcomingEvents, getEventAttendees, updateAttendeeStatus, + getUserEvents, }; From f0946273963180c11af03024f085ebc1cc03c82c Mon Sep 17 00:00:00 2001 From: Jimmy Nguyen Date: Thu, 18 Apr 2024 16:55:16 -0700 Subject: [PATCH 3/4] fix: changed user events url --- packages/server/routes/api/events.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/server/routes/api/events.js b/packages/server/routes/api/events.js index 95076b7d..e97cdd92 100644 --- a/packages/server/routes/api/events.js +++ b/packages/server/routes/api/events.js @@ -409,7 +409,7 @@ router.put( ); router.get( - "/events/:userId/upcoming", + "/:userId/events", AuthController.authenticate, userIdValidator, async (request, response) => { From 0545975362eda4642ffdaf8a72a04476b7c61721 Mon Sep 17 00:00:00 2001 From: Jimmy Nguyen Date: Thu, 18 Apr 2024 16:57:24 -0700 Subject: [PATCH 4/4] fix: updated prisma query to return event with proper data --- packages/server/controllers/events.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/server/controllers/events.js b/packages/server/controllers/events.js index 191501a7..7c07298d 100644 --- a/packages/server/controllers/events.js +++ b/packages/server/controllers/events.js @@ -212,17 +212,21 @@ async function getUserEvents(currentDate, userId) { eventAttendees: { some: { userId: userId, - status: { - in: ["Interested", "Attending"], - }, + status: { in: ["Interested", "Attending"] }, }, }, startDate: { gte: currentDate }, }, - orderBy: { - startDate: "asc", + select: { + eventId: true, + startDate: true, + eventAttendees: { + select: { status: true }, + where: { userId: userId }, + }, }, }); + return userEvents; }