mirror of
https://github.com/polaroi8d/cactoide.git
synced 2026-03-22 06:05:28 +00:00
feat: implement psql and improvements
This commit is contained in:
74
src/routes/event/+page.server.ts
Normal file
74
src/routes/event/+page.server.ts
Normal file
@@ -0,0 +1,74 @@
|
||||
import { drizzleQuery } from '$lib/database/db';
|
||||
import { events } from '$lib/database/schema';
|
||||
import { fail } from '@sveltejs/kit';
|
||||
import { eq, desc } from 'drizzle-orm';
|
||||
|
||||
export const load = async ({ cookies }) => {
|
||||
const userId = cookies.get('cactoideUserId');
|
||||
|
||||
if (!userId) {
|
||||
return { events: [] };
|
||||
}
|
||||
|
||||
try {
|
||||
const userEvents = await drizzleQuery
|
||||
.select()
|
||||
.from(events)
|
||||
.where(eq(events.userId, userId))
|
||||
.orderBy(desc(events.createdAt));
|
||||
|
||||
console.log(userEvents);
|
||||
|
||||
const transformedEvents = userEvents.map((event) => ({
|
||||
id: event.id,
|
||||
name: event.name,
|
||||
date: event.date,
|
||||
time: event.time,
|
||||
location: event.location,
|
||||
type: event.type,
|
||||
attendee_limit: event.attendeeLimit,
|
||||
visibility: event.visibility,
|
||||
user_id: event.userId,
|
||||
created_at: event.createdAt?.toISOString() || new Date().toISOString(),
|
||||
updated_at: event.updatedAt?.toISOString() || new Date().toISOString()
|
||||
}));
|
||||
|
||||
return { events: transformedEvents };
|
||||
} catch (error) {
|
||||
console.error('Error loading user events:', error);
|
||||
return { events: [] };
|
||||
}
|
||||
};
|
||||
|
||||
export const actions: Actions = {
|
||||
deleteEvent: async ({ request, cookies }) => {
|
||||
const formData = await request.formData();
|
||||
const eventId = formData.get('eventId') as string;
|
||||
const userId = cookies.get('cactoideUserId');
|
||||
|
||||
if (!eventId || !userId) {
|
||||
return fail(400, { error: 'Event ID and User ID are required' });
|
||||
}
|
||||
|
||||
try {
|
||||
// First verify the user owns this event
|
||||
const [eventData] = await drizzleQuery.select().from(events).where(eq(events.id, eventId));
|
||||
|
||||
if (!eventData) {
|
||||
return fail(404, { error: 'Event not found' });
|
||||
}
|
||||
|
||||
if (eventData.userId !== userId) {
|
||||
return fail(403, { error: 'You do not have permission to delete this event' });
|
||||
}
|
||||
|
||||
// Delete the event (RSVPs will be deleted automatically due to CASCADE)
|
||||
await drizzleQuery.delete(events).where(eq(events.id, eventId));
|
||||
|
||||
return { success: true };
|
||||
} catch (error) {
|
||||
console.error('Error deleting event:', error);
|
||||
return fail(500, { error: 'Failed to delete event' });
|
||||
}
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user