84 lines
1.6 KiB
TypeScript
84 lines
1.6 KiB
TypeScript
import { getServerSession } from "../../api/auth/[...nextauth]/auth";
|
|
import { PrismaClient } from "@repo/db";
|
|
import { KursItem } from "./_components/item";
|
|
import { RocketIcon } from "@radix-ui/react-icons";
|
|
|
|
export default async () => {
|
|
const prisma = new PrismaClient();
|
|
const session = await getServerSession();
|
|
if (!session) return null;
|
|
const user = await prisma.user.findUnique({
|
|
where: {
|
|
id: session.user.id,
|
|
},
|
|
});
|
|
if (!user) return null;
|
|
|
|
const events = await prisma.event.findMany({
|
|
include: {
|
|
appointments: {
|
|
where: {
|
|
appointmentDate: {
|
|
gte: new Date(),
|
|
},
|
|
},
|
|
},
|
|
participants: {
|
|
where: {
|
|
userId: user.id,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
const appointments = await prisma.eventAppointment.findMany({
|
|
where: {
|
|
appointmentDate: {
|
|
gte: new Date(),
|
|
},
|
|
},
|
|
include: {
|
|
Participants: {
|
|
where: {
|
|
userId: user.id,
|
|
},
|
|
},
|
|
_count: {
|
|
select: {
|
|
Participants: true,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
const userAppointments = await prisma.eventAppointment.findMany({
|
|
where: {
|
|
Participants: {
|
|
some: {
|
|
userId: user.id,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
return (
|
|
<div className="grid grid-cols-6 gap-4">
|
|
<div className="col-span-full">
|
|
<p className="text-2xl font-semibold text-left flex items-center gap-2">
|
|
<RocketIcon className="w-5 h-5" /> Events & Kurse
|
|
</p>
|
|
</div>
|
|
|
|
{events.map((event) => {
|
|
return (
|
|
<KursItem
|
|
appointments={appointments}
|
|
selectedAppointments={userAppointments}
|
|
user={user}
|
|
event={event}
|
|
key={event.id}
|
|
/>
|
|
);
|
|
})}
|
|
</div>
|
|
);
|
|
};
|