src/app/api/policy/route.ts
Linked repository file from this build.
import { NextResponse } from "next/server";
import { apiRoute } from "@/lib/api-route";
import { getActor } from "@/lib/auth/server";
import { AccessError, can } from "@/lib/auth/scope";
import { listPolicies, publishPolicy } from "@/lib/db/policy-store";
import { policySchema } from "@/features/policy/schema";
export const dynamic = "force-dynamic";
export const GET = apiRoute("Unable to load policy tables.", async (request) => {
if (!can(await getActor(request), "report")) throw new AccessError();
return NextResponse.json(await listPolicies());
});
export const POST = apiRoute(
"Unable to publish. Check the effective month and try again.",
async (request) => {
const actor = await getActor(request);
if (!can(actor, "report")) throw new AccessError();
const parsed = policySchema.safeParse(await request.json());
if (!parsed.success)
return NextResponse.json(
{
error: parsed.error.issues
.map((issue) => `${issue.path.join(".")}: ${issue.message}`)
.join(" "),
},
{ status: 400 },
);
return NextResponse.json(await publishPolicy(actor, parsed.data), { status: 201 });
},
);