import { prisma } from '@innungsapp/shared' import { auth, getSanitizedHeaders } from '@/lib/auth' import { headers } from 'next/headers' import { redirect } from 'next/navigation' import Link from 'next/link' import { TERMIN_TYP_LABELS } from '@innungsapp/shared' import { format } from 'date-fns' import { de } from 'date-fns/locale' const TYP_COLORS: Record = { Pruefung: 'bg-blue-100 text-blue-700', Versammlung: 'bg-purple-100 text-purple-700', Kurs: 'bg-green-100 text-green-700', Event: 'bg-yellow-100 text-yellow-700', Sonstiges: 'bg-gray-100 text-gray-700', } export default async function TerminePage() { const sanitizedHeaders = await getSanitizedHeaders() const session = await auth.api.getSession({ headers: sanitizedHeaders }) if (!session?.user) redirect('/login') const userRole = await prisma.userRole.findFirst({ where: { userId: session.user.id, role: 'admin' }, }) if (!userRole) redirect('/dashboard') const now = new Date() const [upcoming, past] = await Promise.all([ prisma.termin.findMany({ where: { orgId: userRole.orgId, datum: { gte: now } }, include: { anmeldungen: { select: { id: true } } }, orderBy: { datum: 'asc' }, }), prisma.termin.findMany({ where: { orgId: userRole.orgId, datum: { lt: now } }, include: { anmeldungen: { select: { id: true } } }, orderBy: { datum: 'desc' }, take: 10, }), ]) const TerminRow = ({ t }: { t: typeof upcoming[0] }) => (

{format(t.datum, 'dd', { locale: de })}

{format(t.datum, 'MMM', { locale: de })}

{t.titel}

{t.ort &&

{t.ort}

} {TERMIN_TYP_LABELS[t.typ]} {t.maxTeilnehmer ? `${t.anmeldungen.length} / ${t.maxTeilnehmer}` : t.anmeldungen.length} Bearbeiten ) return (

Termine

+ Termin anlegen

Bevorstehend ({upcoming.length})

{upcoming.map((t) => )}
Datum Titel Typ Anmeldungen
{upcoming.length === 0 && (
Keine bevorstehenden Termine
)}
{past.length > 0 && (

Vergangen

{past.map((t) => )}
)}
) }