Skip to content

Commit df9b634

Browse files
committed
sending entire events details along with all events user is om
1 parent ac6ce4b commit df9b634

File tree

4 files changed

+172
-19
lines changed

4 files changed

+172
-19
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/*
2+
Warnings:
3+
4+
- You are about to drop the column `bride_groom_images` on the `WeddingEvent` table. All the data in the column will be lost.
5+
6+
*/
7+
-- AlterTable
8+
ALTER TABLE "WeddingEvent" DROP COLUMN "bride_groom_images",
9+
ADD COLUMN "bride_image" TEXT,
10+
ADD COLUMN "groom_image" TEXT;

prisma/schema.prisma

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -119,21 +119,22 @@ model Event {
119119
guests Guest[]
120120
messages Message[]
121121
invites Invite[]
122+
guestGroups EventGuestGroup[]
122123
}
123124

124125
model WeddingEvent {
125-
id String @id // This ID must match the Event's ID
126-
bride_name String
127-
bride_details String?
128-
groom_name String
129-
groom_details String?
130-
bride_groom_images String[]
131-
hashtag String?
126+
id String @id // This ID must match the Event's ID
127+
bride_name String
128+
bride_details String?
129+
bride_image String?
130+
groom_name String
131+
groom_details String?
132+
groom_image String?
133+
hashtag String?
132134
133135
// Relation back to the main Event
134136
event Event @relation(fields: [id], references: [id], onDelete: Cascade)
135137
}
136-
137138
model BirthdayEvent {
138139
id String @id // This ID must match the Event's ID
139140
person_image String?
@@ -242,6 +243,7 @@ model GuestGroup {
242243
invites Invite[]
243244
}
244245

246+
245247
model GuestGroupUsers {
246248
id String @id @default(uuid())
247249
guest_group_id String

src/routes/eventRoutes.ts

Lines changed: 43 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ import {
1313
addTravelDetails,
1414
addCorporateDetails,
1515
addCollegeDetails,
16-
addOtherDetails
16+
addOtherDetails,
17+
getAllUserEvents
1718
} from '../services/eventService';
1819
import { verifyIdToken } from '../middleware/verifyIdToken';
1920
import { parseMultipartForm, uploadFilesToSupabase } from '../lib/fileUpload';
@@ -37,6 +38,30 @@ router.get('/:eventId', verifyIdToken, async (req: Request, res: Response) => {
3738
}
3839
});
3940

41+
router.get('/', verifyIdToken, async (req: Request, res: Response) => {
42+
try {
43+
const userId = req.userId;
44+
45+
const user = await getUser(userId);
46+
if (!user) {
47+
res.status(404).json({ message: 'User not found' });
48+
return;
49+
}
50+
51+
const { success, events, error } = await getAllUserEvents(userId);
52+
53+
if (success) {
54+
res.status(200).json({ events });
55+
} else {
56+
res.status(500).json({ message: error ?? 'Internal Server Error' });
57+
}
58+
} catch (error) {
59+
console.error(error);
60+
res.status(500).json({ message: 'Internal Server Error' });
61+
}
62+
});
63+
64+
4065
// Create Event
4166
router.post('/create', verifyIdToken, async (req: Request, res: Response) => {
4267
try {
@@ -212,21 +237,31 @@ router.post('/add-wedding-details', verifyIdToken, async (req: Request, res: Res
212237
return;
213238
}
214239

215-
// Upload files to Supabase if any
216-
let imageUrls: string[] = [];
240+
// Handle file uploads
241+
let bride_image = '';
242+
let groom_image = '';
243+
217244
if (files && files.length > 0) {
218-
imageUrls = await uploadFilesToSupabase(files, 'wedding-images');
245+
// Upload all files
246+
const imageUrls = await uploadFilesToSupabase(files, 'wedding-images');
247+
248+
// Assuming the first image is bride and second is groom
249+
// You might want to modify this logic based on how files are named/ordered
250+
if (imageUrls.length > 0) bride_image = imageUrls[0];
251+
if (imageUrls.length > 1) groom_image = imageUrls[1];
219252
}
220253

221-
// Use the uploaded image URLs or the bride_groom_images field from fields
222-
const bride_groom_images = imageUrls.length > 0 ? imageUrls : (fields.bride_groom_images || []);
254+
// Override with individual fields if provided
255+
if (fields.bride_image) bride_image = fields.bride_image;
256+
if (fields.groom_image) groom_image = fields.groom_image;
223257

224258
const { success, weddingDetails, error } = await addWeddingDetails(eventId, {
225259
bride_name,
226260
groom_name,
227261
bride_details,
228262
groom_details,
229-
bride_groom_images,
263+
bride_image,
264+
groom_image,
230265
hashtag
231266
});
232267

@@ -239,8 +274,7 @@ router.post('/add-wedding-details', verifyIdToken, async (req: Request, res: Res
239274
console.error(error);
240275
res.status(500).json({ message: 'Internal Server Error' });
241276
}
242-
});
243-
277+
});``
244278
// Add Birthday Details
245279
router.post('/add-birthday-details', verifyIdToken, async (req: Request, res: Response) => {
246280
try {

src/services/eventService.ts

Lines changed: 109 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,12 +200,118 @@ export const updateEvent = async (eventId: string, data: {
200200
}
201201
};
202202

203+
export const getAllUserEvents = async (userId: string) => {
204+
try {
205+
// Get events where user is host
206+
const hostedEvents = await prisma.event.findMany({
207+
where: { hostId: userId },
208+
include: {
209+
host: true,
210+
co_hosts: true,
211+
weddingDetails: true,
212+
birthdayDetails: true,
213+
housePartyDetails: true,
214+
travelDetails: true,
215+
corporateDetails: true,
216+
collegeDetails: true,
217+
otherDetails: true,
218+
}
219+
});
220+
221+
// Get events where user is co-host
222+
const coHostedEvents = await prisma.event.findMany({
223+
where: {
224+
co_hosts: {
225+
some: { id: userId }
226+
}
227+
},
228+
include: {
229+
host: true,
230+
co_hosts: true,
231+
weddingDetails: true,
232+
birthdayDetails: true,
233+
housePartyDetails: true,
234+
travelDetails: true,
235+
corporateDetails: true,
236+
collegeDetails: true,
237+
otherDetails: true,
238+
}
239+
});
240+
241+
// Get events where user is a guest
242+
const guestEvents = await prisma.event.findMany({
243+
where: {
244+
guests: {
245+
some: { user_id: userId }
246+
}
247+
},
248+
include: {
249+
host: true,
250+
co_hosts: true,
251+
weddingDetails: true,
252+
birthdayDetails: true,
253+
housePartyDetails: true,
254+
travelDetails: true,
255+
corporateDetails: true,
256+
collegeDetails: true,
257+
otherDetails: true,
258+
}
259+
});
260+
261+
// Format events with roles
262+
const eventsWithRoles = [
263+
...hostedEvents.map(event => ({ ...event, userRole: 'host' as const })),
264+
...coHostedEvents.map(event => ({ ...event, userRole: 'cohost' as const })),
265+
...guestEvents.map(event => ({ ...event, userRole: 'guest' as const }))
266+
];
267+
268+
// Remove duplicates (in case user is both cohost and guest, etc.)
269+
const uniqueEvents = eventsWithRoles.reduce((acc, current) => {
270+
const existingEvent = acc.find(event => event.id === current.id);
271+
272+
if (!existingEvent) {
273+
acc.push(current);
274+
} else {
275+
// If event exists, prioritize role hierarchy: host > cohost > guest
276+
const rolePriority = { host: 3, cohost: 2, guest: 1 };
277+
if (rolePriority[current.userRole] > rolePriority[existingEvent.userRole]) {
278+
const index = acc.findIndex(event => event.id === current.id);
279+
acc[index] = current;
280+
}
281+
}
282+
283+
return acc;
284+
}, [] as (typeof eventsWithRoles)[0][]);
285+
286+
// Sort by creation date (newest first)
287+
uniqueEvents.sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime());
288+
289+
return {
290+
success: true,
291+
events: uniqueEvents
292+
};
293+
} catch (error: unknown) {
294+
if (error instanceof Error) {
295+
return {
296+
success: false,
297+
error: error.message,
298+
};
299+
} else {
300+
return {
301+
success: false,
302+
error: "Failed to fetch events",
303+
};
304+
}
305+
}
306+
};
307+
203308
export const addWeddingDetails = async (eventId: string, data: {
204309
bride_name: string;
205310
groom_name: string;
206311
bride_details?: string;
207312
groom_details?: string;
208-
bride_groom_images?: string[];
313+
bride_image?: string;
314+
groom_image?: string;
209315
hashtag?: string;
210316
}) => {
211317
try {
@@ -235,7 +341,8 @@ export const addWeddingDetails = async (eventId: string, data: {
235341
groom_name: data.groom_name,
236342
bride_details: data.bride_details || null,
237343
groom_details: data.groom_details || null,
238-
bride_groom_images: data.bride_groom_images || [],
344+
bride_image: data.bride_image || null,
345+
groom_image: data.groom_image || null,
239346
hashtag: data.hashtag || null
240347
}
241348
});

0 commit comments

Comments
 (0)