import { NextResponse } from "next/server"; import { getPayload } from "payload"; import config from "@payload-config"; import { calendarFeedUrl, generateCalendarFeedToken, hashCalendarFeedToken } from "@/lib/calendar/feedToken"; export const dynamic = "force-dynamic"; /** * POST /api/admin/calendar-feed/regenerate — (re)generates Anna's personal * ICS feed link. Only the new token's hash is stored; the plaintext URL is * returned exactly once in this response and can never be retrieved again * — generating a new one immediately invalidates whichever link was issued * before (see collections/Users.ts). */ export async function POST(request: Request) { try { const payload = await getPayload({ config }); const { user } = await payload.auth({ headers: request.headers }); if (!user || user.collection !== "users") { return NextResponse.json({ error: "Nicht autorisiert." }, { status: 401 }); } const token = generateCalendarFeedToken(); await payload.update({ collection: "users", id: user.id, data: { calendarFeedTokenHash: hashCalendarFeedToken(token) }, }); return NextResponse.json({ url: calendarFeedUrl(token) }); } catch (error) { console.error("calendar feed regenerate failed", error); return NextResponse.json({ error: "Der Kalender-Link konnte nicht erzeugt werden." }, { status: 500 }); } }