diff --git a/package-lock.json b/package-lock.json index f541cbff0..6e27ecbd6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1273,7 +1273,6 @@ "node_modules/@babel/core": { "version": "7.28.5", "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -3906,7 +3905,6 @@ "node_modules/@redis/client": { "version": "1.6.1", "license": "MIT", - "peer": true, "dependencies": { "cluster-key-slot": "1.1.2", "generic-pool": "3.9.0", @@ -4853,7 +4851,6 @@ "node_modules/@types/node-fetch": { "version": "2.6.13", "license": "MIT", - "peer": true, "dependencies": { "@types/node": "*", "form-data": "^4.0.4" @@ -4988,7 +4985,6 @@ "version": "8.15.0", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -5766,7 +5762,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.25", "caniuse-lite": "^1.0.30001754", @@ -6987,7 +6982,6 @@ "version": "8.57.1", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -7133,7 +7127,6 @@ "version": "2.32.0", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -7185,7 +7178,6 @@ "version": "6.10.2", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "aria-query": "^5.3.2", "array-includes": "^3.1.8", @@ -7214,7 +7206,6 @@ "version": "7.37.5", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", @@ -7246,7 +7237,6 @@ "version": "4.6.2", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10" }, diff --git a/src/controllers/eventController.js b/src/controllers/eventController.js index 678d78915..fcaa758c2 100644 --- a/src/controllers/eventController.js +++ b/src/controllers/eventController.js @@ -8,26 +8,55 @@ const updateEventStatus = (event) => { return event.status; }; +function getMonthRangeAround(inputDate) { + const date = new Date(inputDate); + + // Get the first day of 2 months ago + const startDate = new Date(date.getFullYear(), date.getMonth() - 2, 1); + + // Get the last day of 2 months from now + const endDate = new Date(date.getFullYear(), date.getMonth() + 3, 0); + + return { + startDate: startDate.toISOString().split('T')[0], + endDate: endDate.toISOString().split('T')[0], + }; +} + const getEvents = async (req, res) => { - const { page = 1, limit = 9, type = '', location = '', sortBy = 'date' } = req.query; + const { page = 1, limit, type = '', location = '', sortBy = 'date', date } = req.query; try { const validSortFields = ['date', 'title', 'type', 'location', 'currentAttendees']; const sortField = validSortFields.includes(sortBy) ? sortBy : 'date'; const query = { isActive: true }; + + if (date) { + const { startDate, endDate } = getMonthRangeAround(date); + query.date = { $gte: startDate, $lte: endDate }; + } if (type) query.type = type; if (location) query.location = location; const pageNumber = Math.max(1, Number(page)); - const limitNumber = Math.max(1, Number(limit)); - const totalEvents = await Event.countDocuments(query); - let events = await Event.find(query) - .populate('resources.userID') - .sort({ [sortField]: 1 }) - .skip((pageNumber - 1) * limitNumber) - .limit(limitNumber); + + let events; + let limitNumber; + if (limit) { + limitNumber = Math.max(1, Number(limit)); + events = await Event.find(query) + .populate('resources.userID') + .sort({ [sortField]: 1 }) + .skip((pageNumber - 1) * limitNumber) + .limit(limitNumber); + } else { + limitNumber = 'unlimited'; + events = await Event.find(query) + .populate('resources.userID') + .sort({ [sortField]: 1 }); + } events = events.map((event) => { event.status = updateEventStatus(event); @@ -70,7 +99,10 @@ const createEvent = async (req, res) => { try { const newEvent = new Event(req.body); const savedEvent = await newEvent.save(); - res.status(201).json(savedEvent); + res.status(201).json({ + status: 'success', + message: 'Event details saved successfully', + }); } catch (error) { res.status(500).json({ error: 'Failed to create event',