Files
flimmer/src/app/api/v1/kalender/route.ts
T
Florian Wilde bb63827bf7 feat: REST-API unter /api/v1 mit OpenAPI-Beschreibung
Dieselben Endpunkte bedienen Skripte und das eigene Frontend: erst wird ein
Bearer-Token geprüft, sonst das Sitzungscookie.

Sichtungsaktionen geben immer watchIds zurück — damit lässt sich genau diese
Aktion über DELETE zurücknehmen, ohne raten zu müssen, was dazugehörte.

Die OpenAPI-Beschreibung ist handgeschrieben statt aus Zod erzeugt: die
Schnittstelle ist überschaubar, und ein Generator brächte eine weitere
Abhängigkeit für einen Nutzen, den ein Dutzend Zeilen JSON auch hergeben.
2026-09-01 20:24:48 +02:00

30 lines
861 B
TypeScript

import { withApi } from "@/lib/api";
import { getUpcomingEpisodes } from "@/lib/stats";
/**
* GET /api/v1/kalender?von=2026-09-01&bis=2026-09-30
*
* Kommende Episoden der getrackten Serien. Ohne Angabe: die nächsten 30 Tage.
*/
export const GET = withApi(async (request, user) => {
const url = new URL(request.url);
const parse = (value: string | null, fallback: Date) => {
if (!value) return fallback;
const date = new Date(value);
return Number.isNaN(date.getTime()) ? fallback : date;
};
const from = parse(url.searchParams.get("von"), new Date());
const to = parse(url.searchParams.get("bis"), new Date(Date.now() + 30 * 86_400_000));
const episodes = await getUpcomingEpisodes(user.id, from, to);
return {
from: from.toISOString(),
to: to.toISOString(),
total: episodes.length,
items: episodes,
};
});