/** * Invite-Annahmeseite (plan.md Abschnitt 3). * * Serverkomponente: prueft den Token serverseitig und zeigt den * Kalendertitel. Danach Registrierung mit dem Token in der URL. */ import Link from 'next/link'; import { prisma } from '@/lib/db/client'; import { hashInviteToken, isInviteUsable } from '@/lib/invites/tokens'; import { Card } from '@/components/ui/ui'; interface PageProps { params: Promise<{ token: string }>; } export default async function InvitePage({ params }: PageProps) { const { token } = await params; const tokenHash = hashInviteToken(token); const invite = await prisma.invite.findUnique({ where: { tokenHash }, select: { expiresAt: true, usedAt: true, calendar: { select: { title: true, description: true } }, }, }); if (!invite || !isInviteUsable(invite)) { return (

Einladung ungueltig

Dieser Einladungslink ist ungueltig oder abgelaufen. Bitte wende dich an den Administrator.

); } return (

Einladung

Du wurdest zum Kalender{' '} {invite.calendar.title} eingeladen. {invite.calendar.description && ( {invite.calendar.description} )}

Jetzt registrieren
); }