Skip to content

Commit 145f5bb

Browse files
committed
feat: add get my groups, available groups for event, and add group to event endpoints
1 parent 06c3272 commit 145f5bb

File tree

2 files changed

+486
-35
lines changed

2 files changed

+486
-35
lines changed

src/routes/guestRoutes.ts

Lines changed: 93 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,52 @@ import {
99
deleteGuestGroup,
1010
addUserToGroup,
1111
removeUserFromGroup,
12+
getMyGuestGroups,
13+
getAvailableGuestGroupsForEvent,
1214
} from '../services/guestService';
1315
import { verifyIdToken } from '../middleware/verifyIdToken';
1416

1517
const router = express.Router();
1618

19+
// Get all guest groups created by the current user (standalone route)
20+
router.get('/my-groups', verifyIdToken, async (req: Request, res: Response): Promise<void> => {
21+
try {
22+
const userId = req.userId;
23+
24+
if (!userId) {
25+
res.status(401).json({ message: 'Unauthorized' });
26+
return;
27+
}
28+
29+
const result = await getMyGuestGroups(userId);
30+
31+
if (!result.success) {
32+
res.status(400).json({ message: result.error });
33+
return;
34+
}
35+
36+
res.status(200).json({
37+
message: 'Guest groups retrieved successfully',
38+
guestGroups: result.guestGroups,
39+
totalGroups: result.totalGroups
40+
});
41+
} catch (error) {
42+
console.error('Get my guest groups error:', error);
43+
res.status(500).json({ message: 'Internal Server Error' });
44+
}
45+
});
46+
1747
// Create a new guest group for an event
1848
router.post('/:eventId/groups', verifyIdToken, async (req: Request, res: Response): Promise<void> => {
1949
try {
2050
const { eventId } = req.params;
2151
const userId = req.userId;
52+
2253
if (!userId) {
2354
res.status(401).json({ message: 'Unauthorized' });
2455
return;
2556
}
57+
2658
const { name } = req.body;
2759

2860
if (!name) {
@@ -48,7 +80,7 @@ router.post('/:eventId/groups', verifyIdToken, async (req: Request, res: Respons
4880
guestGroup: result.guestGroup
4981
});
5082
} catch (error) {
51-
console.error(error);
83+
console.error('Create guest group error:', error);
5284
res.status(500).json({ message: 'Internal Server Error' });
5385
}
5486
});
@@ -58,12 +90,12 @@ router.post('/:eventId/groups/:groupId', verifyIdToken, async (req: Request, res
5890
try {
5991
const { eventId, groupId } = req.params;
6092
const userId = req.userId;
93+
6194
if (!userId) {
6295
res.status(401).json({ message: 'Unauthorized' });
6396
return;
6497
}
6598

66-
// Check if user is host or co-host
6799
const isAuthorized = await isEventHostOrCoHost(userId, eventId);
68100
if (!isAuthorized) {
69101
res.status(403).json({ message: 'Only event hosts and co-hosts can add guest groups to an event' });
@@ -82,21 +114,58 @@ router.post('/:eventId/groups/:groupId', verifyIdToken, async (req: Request, res
82114
guests: result.guests
83115
});
84116
} catch (error) {
85-
console.error(error);
117+
console.error('Add guest group to event error:', error);
86118
res.status(500).json({ message: 'Internal Server Error' });
87119
}
88120
});
89121

90-
router.get('/:eventId/groups', verifyIdToken, async (req: Request, res: Response) => {
122+
// Get available guest groups that can be added to a specific event
123+
router.get('/:eventId/available-groups', verifyIdToken, async (req: Request, res: Response): Promise<void> => {
91124
try {
92125
const { eventId } = req.params;
93126
const userId = req.userId;
127+
128+
if (!userId) {
129+
res.status(401).json({ message: 'Unauthorized' });
130+
return;
131+
}
132+
133+
// Check if user is host or co-host of the event
134+
const isAuthorized = await isEventHostOrCoHost(userId, eventId);
135+
if (!isAuthorized) {
136+
res.status(403).json({ message: 'Only event hosts and co-hosts can view available guest groups' });
137+
return;
138+
}
139+
140+
const result = await getAvailableGuestGroupsForEvent(userId, eventId);
141+
142+
if (!result.success) {
143+
res.status(400).json({ message: result.error });
144+
return;
145+
}
146+
147+
res.status(200).json({
148+
message: 'Available guest groups retrieved successfully',
149+
availableGroups: result.availableGroups,
150+
totalAvailable: result.totalAvailable
151+
});
152+
} catch (error) {
153+
console.error('Get available guest groups error:', error);
154+
res.status(500).json({ message: 'Internal Server Error' });
155+
}
156+
});
157+
158+
// Get all guest groups for an event
159+
router.get('/:eventId/groups', verifyIdToken, async (req: Request, res: Response): Promise<void> => {
160+
try {
161+
const { eventId } = req.params;
162+
const userId = req.userId;
163+
94164
if (!userId) {
95165
res.status(401).json({ message: 'Unauthorized' });
96166
return;
97167
}
98168

99-
// Check if user is host or co-host
100169
const isAuthorized = await isEventHostOrCoHost(userId, eventId);
101170
if (!isAuthorized) {
102171
res.status(403).json({ message: 'Only event hosts and co-hosts can view guest groups' });
@@ -114,22 +183,22 @@ router.get('/:eventId/groups', verifyIdToken, async (req: Request, res: Response
114183
guestGroups: result.guestGroups
115184
});
116185
} catch (error) {
117-
console.error(error);
186+
console.error('Get guest groups error:', error);
118187
res.status(500).json({ message: 'Internal Server Error' });
119188
}
120189
});
121190

122191
// Get a specific guest group
123-
router.get('/:eventId/groups/:groupId', verifyIdToken, async (req: Request, res: Response) => {
192+
router.get('/:eventId/groups/:groupId', verifyIdToken, async (req: Request, res: Response): Promise<void> => {
124193
try {
125194
const { eventId, groupId } = req.params;
126195
const userId = req.userId;
196+
127197
if (!userId) {
128198
res.status(401).json({ message: 'Unauthorized' });
129199
return;
130200
}
131201

132-
// Check if user is host or co-host
133202
const isAuthorized = await isEventHostOrCoHost(userId, eventId);
134203
if (!isAuthorized) {
135204
res.status(403).json({ message: 'Only event hosts and co-hosts can view guest groups' });
@@ -147,7 +216,7 @@ router.get('/:eventId/groups/:groupId', verifyIdToken, async (req: Request, res:
147216
guestGroup: result.guestGroup
148217
});
149218
} catch (error) {
150-
console.error(error);
219+
console.error('Get guest group error:', error);
151220
res.status(500).json({ message: 'Internal Server Error' });
152221
}
153222
});
@@ -157,10 +226,12 @@ router.put('/:eventId/groups/:groupId', verifyIdToken, async (req: Request, res:
157226
try {
158227
const { eventId, groupId } = req.params;
159228
const userId = req.userId;
229+
160230
if (!userId) {
161231
res.status(401).json({ message: 'Unauthorized' });
162232
return;
163233
}
234+
164235
const { name } = req.body;
165236

166237
const isAuthorized = await isEventHostOrCoHost(userId, eventId);
@@ -181,16 +252,17 @@ router.put('/:eventId/groups/:groupId', verifyIdToken, async (req: Request, res:
181252
guestGroup: result.guestGroup
182253
});
183254
} catch (error) {
184-
console.error(error);
255+
console.error('Update guest group error:', error);
185256
res.status(500).json({ message: 'Internal Server Error' });
186257
}
187258
});
188259

189-
// Delete a guest group from an event (does not delete the group itself)
260+
// Delete a guest group permanently
190261
router.delete('/:eventId/groups/:groupId', verifyIdToken, async (req: Request, res: Response): Promise<void> => {
191262
try {
192263
const { eventId, groupId } = req.params;
193264
const userId = req.userId;
265+
194266
if (!userId) {
195267
res.status(401).json({ message: 'Unauthorized' });
196268
return;
@@ -213,20 +285,24 @@ router.delete('/:eventId/groups/:groupId', verifyIdToken, async (req: Request, r
213285
message: result.message
214286
});
215287
} catch (error) {
216-
console.error(error);
288+
console.error('Delete guest group error:', error);
217289
res.status(500).json({ message: 'Internal Server Error' });
218290
}
219291
});
220292

221-
// Add user to a guest group by phone number
293+
294+
//ignore phone no routes for now
295+
// Add user to a guest group by phone number
222296
router.post('/:eventId/groups/:groupId/members', verifyIdToken, async (req: Request, res: Response): Promise<void> => {
223297
try {
224298
const { eventId, groupId } = req.params;
225299
const userId = req.userId;
300+
226301
if (!userId) {
227302
res.status(401).json({ message: 'Unauthorized' });
228303
return;
229304
}
305+
230306
const { phoneNumber } = req.body;
231307

232308
if (!phoneNumber) {
@@ -252,7 +328,7 @@ router.post('/:eventId/groups/:groupId/members', verifyIdToken, async (req: Requ
252328
member: result.member
253329
});
254330
} catch (error) {
255-
console.error(error);
331+
console.error('Add user to group error:', error);
256332
res.status(500).json({ message: 'Internal Server Error' });
257333
}
258334
});
@@ -262,10 +338,12 @@ router.delete('/:eventId/groups/:groupId/members', verifyIdToken, async (req: Re
262338
try {
263339
const { eventId, groupId } = req.params;
264340
const userId = req.userId;
341+
265342
if (!userId) {
266343
res.status(401).json({ message: 'Unauthorized' });
267344
return;
268345
}
346+
269347
const { phoneNumber } = req.body;
270348

271349
if (!phoneNumber) {
@@ -290,11 +368,9 @@ router.delete('/:eventId/groups/:groupId/members', verifyIdToken, async (req: Re
290368
message: result.message
291369
});
292370
} catch (error) {
293-
console.error(error);
371+
console.error('Remove user from group error:', error);
294372
res.status(500).json({ message: 'Internal Server Error' });
295373
}
296374
});
297375

298-
299-
300376
export default router;

0 commit comments

Comments
 (0)