Skip to content

Commit ed8faaf

Browse files
authored
Merge pull request #19 from IEEECS-VIT/darsh
added Corporate, College and Other event types
2 parents 278cd77 + c61a1aa commit ed8faaf

File tree

3 files changed

+292
-1
lines changed

3 files changed

+292
-1
lines changed

prisma/schema.prisma

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ enum EventType {
2828
Birthday
2929
Houseparty
3030
Travel
31+
Corporate
32+
College
33+
Other
3134
}
3235

3336
enum Language {
@@ -77,6 +80,9 @@ model Event {
7780
birthdayDetails BirthdayEvent?
7881
housePartyDetails HousePartyEvent?
7982
travelDetails TravelEvent?
83+
corporateDetails CorporateEvent?
84+
collegeDetails CollegeEvent?
85+
otherDetails OtherEvent?
8086
8187
// Relations
8288
co_hosts User[] @relation("CoHostEvents")
@@ -131,6 +137,33 @@ model TravelEvent {
131137
event Event @relation(fields: [id], references: [id], onDelete: Cascade)
132138
}
133139

140+
model CorporateEvent {
141+
id String @id // This ID must match the Event's ID
142+
event_details String
143+
terms String?
144+
145+
// Relation back to the main Event
146+
event Event @relation(fields: [id], references: [id], onDelete: Cascade)
147+
}
148+
149+
model CollegeEvent {
150+
id String @id // This ID must match the Event's ID
151+
event_details String
152+
terms String?
153+
154+
// Relation back to the main Event
155+
event Event @relation(fields: [id], references: [id], onDelete: Cascade)
156+
}
157+
158+
model OtherEvent {
159+
id String @id // This ID must match the Event's ID
160+
event_details String
161+
terms String?
162+
163+
// Relation back to the main Event
164+
event Event @relation(fields: [id], references: [id], onDelete: Cascade)
165+
}
166+
134167
model SubEvent {
135168
id String @id @default(uuid())
136169
title String

src/routes/eventRoutes.ts

Lines changed: 103 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ import {
1010
addWeddingDetails,
1111
addBirthdayDetails,
1212
addHousePartyDetails,
13-
addTravelDetails
13+
addTravelDetails,
14+
addCorporateDetails,
15+
addCollegeDetails,
16+
addOtherDetails
1417
} from '../services/eventService';
1518
import { verifyIdToken } from '../middleware/verifyIdToken';
1619
import { parseMultipartForm, uploadFilesToSupabase } from '../lib/fileUpload';
@@ -353,6 +356,105 @@ router.post('/add-travel-details', verifyIdToken, async (req: Request, res: Resp
353356
}
354357
});
355358

359+
// Add Corporate Details
360+
router.post('/add-corporate-details', verifyIdToken, async (req: Request, res: Response) => {
361+
try {
362+
const userId = req.userId;
363+
const { eventId, event_details, terms } = req.body;
364+
365+
if (!eventId) {
366+
res.status(400).json({ message: 'Missing required field: eventId' });
367+
return;
368+
}
369+
370+
const user = await getUser(userId);
371+
if (!user) {
372+
res.status(404).json({ message: 'User not found' });
373+
return;
374+
}
375+
376+
const { success, corporateDetails, error } = await addCorporateDetails(eventId, {
377+
event_details,
378+
terms
379+
});
380+
381+
if (success) {
382+
res.status(200).json({ message: 'Corporate details added successfully', corporateDetails });
383+
} else {
384+
res.status(500).json({ message: error ?? 'Internal Server Error' });
385+
}
386+
} catch (error) {
387+
console.error(error);
388+
res.status(500).json({ message: 'Internal Server Error' });
389+
}
390+
});
391+
392+
// Add College Details
393+
router.post('/add-college-details', verifyIdToken, async (req: Request, res: Response) => {
394+
try {
395+
const userId = req.userId;
396+
const { eventId, event_details, terms } = req.body;
397+
398+
if (!eventId) {
399+
res.status(400).json({ message: 'Missing required field: eventId' });
400+
return;
401+
}
402+
403+
const user = await getUser(userId);
404+
if (!user) {
405+
res.status(404).json({ message: 'User not found' });
406+
return;
407+
}
408+
409+
const { success, collegeDetails, error } = await addCollegeDetails(eventId, {
410+
event_details,
411+
terms
412+
});
413+
414+
if (success) {
415+
res.status(200).json({ message: 'College details added successfully', collegeDetails });
416+
} else {
417+
res.status(500).json({ message: error ?? 'Internal Server Error' });
418+
}
419+
} catch (error) {
420+
console.error(error);
421+
res.status(500).json({ message: 'Internal Server Error' });
422+
}
423+
});
424+
425+
// Add Other Details
426+
router.post('/add-other-details', verifyIdToken, async (req: Request, res: Response) => {
427+
try {
428+
const userId = req.userId;
429+
const { eventId, event_details, terms } = req.body;
430+
431+
if (!eventId) {
432+
res.status(400).json({ message: 'Missing required field: eventId' });
433+
return;
434+
}
435+
436+
const user = await getUser(userId);
437+
if (!user) {
438+
res.status(404).json({ message: 'User not found' });
439+
return;
440+
}
441+
442+
const { success, otherDetails, error } = await addOtherDetails(eventId, {
443+
event_details,
444+
terms
445+
});
446+
447+
if (success) {
448+
res.status(200).json({ message: 'Other details added successfully', otherDetails });
449+
} else {
450+
res.status(500).json({ message: error ?? 'Internal Server Error' });
451+
}
452+
} catch (error) {
453+
console.error(error);
454+
res.status(500).json({ message: 'Internal Server Error' });
455+
}
456+
});
457+
356458
// Delete Event
357459
router.delete('/:eventId', verifyIdToken, async (req: Request, res: Response) => {
358460
try {

src/services/eventService.ts

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,162 @@ export const addTravelDetails = async (eventId: string, data: {
418418
}
419419
};
420420

421+
// Corporate Event Details
422+
export const addCorporateDetails = async (eventId: string, data: {
423+
event_details: string;
424+
terms?: string;
425+
}) => {
426+
try {
427+
// First verify the event exists and is of type Corporate
428+
const event = await prisma.event.findUnique({
429+
where: { id: eventId }
430+
});
431+
432+
if (!event) {
433+
return {
434+
success: false,
435+
error: "Event not found"
436+
};
437+
}
438+
439+
if (event.type !== 'Corporate') {
440+
return {
441+
success: false,
442+
error: "Event is not a corporate type"
443+
};
444+
}
445+
446+
const corporateDetails = await prisma.corporateEvent.create({
447+
data: {
448+
id: eventId,
449+
event_details: data.event_details,
450+
terms: data.terms || null
451+
}
452+
});
453+
454+
return {
455+
success: true,
456+
corporateDetails
457+
};
458+
} catch (error: unknown) {
459+
if (error instanceof Error) {
460+
return {
461+
success: false,
462+
error: error.message
463+
};
464+
} else {
465+
return {
466+
success: false,
467+
error: "Failed to add corporate details"
468+
};
469+
}
470+
}
471+
};
472+
473+
// College Event Details
474+
export const addCollegeDetails = async (eventId: string, data: {
475+
event_details: string;
476+
terms?: string;
477+
}) => {
478+
try {
479+
// First verify the event exists and is of type College
480+
const event = await prisma.event.findUnique({
481+
where: { id: eventId }
482+
});
483+
484+
if (!event) {
485+
return {
486+
success: false,
487+
error: "Event not found"
488+
};
489+
}
490+
491+
if (event.type !== 'College') {
492+
return {
493+
success: false,
494+
error: "Event is not a college type"
495+
};
496+
}
497+
498+
const collegeDetails = await prisma.collegeEvent.create({
499+
data: {
500+
id: eventId,
501+
event_details: data.event_details,
502+
terms: data.terms || null
503+
}
504+
});
505+
506+
return {
507+
success: true,
508+
collegeDetails
509+
};
510+
} catch (error: unknown) {
511+
if (error instanceof Error) {
512+
return {
513+
success: false,
514+
error: error.message
515+
};
516+
} else {
517+
return {
518+
success: false,
519+
error: "Failed to add college details"
520+
};
521+
}
522+
}
523+
};
524+
525+
// Other Event Details
526+
export const addOtherDetails = async (eventId: string, data: {
527+
event_details: string;
528+
terms?: string;
529+
}) => {
530+
try {
531+
// First verify the event exists and is of type Other
532+
const event = await prisma.event.findUnique({
533+
where: { id: eventId }
534+
});
535+
536+
if (!event) {
537+
return {
538+
success: false,
539+
error: "Event not found"
540+
};
541+
}
542+
543+
if (event.type !== 'Other') {
544+
return {
545+
success: false,
546+
error: "Event is not an 'Other' type"
547+
};
548+
}
549+
550+
const otherDetails = await prisma.otherEvent.create({
551+
data: {
552+
id: eventId,
553+
event_details: data.event_details,
554+
terms: data.terms || null
555+
}
556+
});
557+
558+
return {
559+
success: true,
560+
otherDetails
561+
};
562+
} catch (error: unknown) {
563+
if (error instanceof Error) {
564+
return {
565+
success: false,
566+
error: error.message
567+
};
568+
} else {
569+
return {
570+
success: false,
571+
error: "Failed to add other details"
572+
};
573+
}
574+
}
575+
};
576+
421577
export const deleteEvent = async (eventId: string) => {
422578
try {
423579
const event = await prisma.event.delete({

0 commit comments

Comments
 (0)