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.
22 lines
819 B
TypeScript
22 lines
819 B
TypeScript
import { z } from "zod";
|
|
import { readJson, withApi } from "@/lib/api";
|
|
import { createUniverse, listUniverses } from "@/lib/universes";
|
|
|
|
/** GET /api/v1/universen — eigene und geteilte Universen. */
|
|
export const GET = withApi(async (_request, user) => {
|
|
const universes = await listUniverses(user.id);
|
|
return { total: universes.length, items: universes };
|
|
});
|
|
|
|
const createSchema = z.object({
|
|
name: z.string().trim().min(1).max(120),
|
|
description: z.string().max(2000).optional(),
|
|
});
|
|
|
|
/** POST /api/v1/universen — neues Universum anlegen. */
|
|
export const POST = withApi(async (request, user) => {
|
|
const body = await readJson(request, createSchema);
|
|
const universe = await createUniverse(user.id, body.name, body.description);
|
|
return { id: universe.id, name: universe.name, slug: universe.slug };
|
|
});
|