diff --git a/src/components/AtendedEventList.tsx b/src/components/AtendedEventList.tsx index 96018c8..a422e73 100644 --- a/src/components/AtendedEventList.tsx +++ b/src/components/AtendedEventList.tsx @@ -1,9 +1,15 @@ "use server"; import Event from "@/lib/event"; +import { auth } from "@/lib/auth"; import { EventList } from "./EventList"; +import { headers } from "next/headers"; export default async function AttendedEventList() { - const events = await Event.findAll(); + const session = await auth.api.getSession({ + headers: await headers(), + }); + const userId = session?.user?.id; + const events = userId ? await Event.findByAtendeeUserId(userId) : []; return ; } diff --git a/src/lib/event.ts b/src/lib/event.ts index daa7884..11527c4 100644 --- a/src/lib/event.ts +++ b/src/lib/event.ts @@ -210,6 +210,44 @@ export default class Event { ); } + static async findByAtendeeUserId( + userId: string, + { + status, + atendeeStatuses = [AtendeeStatus.Attend, AtendeeStatus.Maybe], + }: { status?: EventStatus[]; atendeeStatuses?: AtendeeStatus[] } = {}, + ): Promise { + const events = await prisma.event.findMany({ + where: { + ...(status ? { status: { in: status } } : {}), + participants: { + some: { + userId, + status: { in: atendeeStatuses }, + }, + }, + }, + }); + + return events.map( + (event) => + new Event({ + id: event.id, + title: event.title, + description: event.description || undefined, + date: event.date, + startAt: event.startTime || undefined, + endAt: event.endTime || undefined, + registrationDeadline: event.registrationDeadline || undefined, + capacity: event.capacity || undefined, + location: event.location || undefined, + status: event.status as EventStatus, + createdAt: event.createdAt || undefined, + updatedAt: event.updatedAt || undefined, + }), + ); + } + async addAtendee( userId: string, status: AtendeeStatus = AtendeeStatus.Attend,