initial push

This commit is contained in:
Marcelo Dares
2026-03-15 15:03:56 +01:00
parent d48b9d5352
commit 65aaf9275e
146 changed files with 70245 additions and 100 deletions

View File

@@ -0,0 +1,54 @@
import { NextResponse } from "next/server";
import { ContentPageType } from "@prisma/client";
import { requireAdminApiUser } from "@/lib/auth/admin";
import { prisma } from "@/lib/prisma";
import { buildAppUrl } from "@/lib/http/url";
function redirectTo(request: Request, status: string) {
return NextResponse.redirect(buildAppUrl(request, "/admin", { status }));
}
function asString(formData: FormData, key: string) {
const value = formData.get(key);
return typeof value === "string" ? value.trim() : "";
}
export async function POST(request: Request) {
const adminUser = await requireAdminApiUser();
if (!adminUser) {
return redirectTo(request, "admin_error");
}
const formData = await request.formData();
const id = asString(formData, "id");
const typeValue = asString(formData, "type");
const slug = asString(formData, "slug");
const title = asString(formData, "title");
const content = asString(formData, "content");
const sortOrder = Number.parseInt(asString(formData, "sortOrder") || "0", 10);
const isPublished = formData.get("isPublished") === "on";
if (!id || !slug || !title || !content || (typeValue !== ContentPageType.FAQ && typeValue !== ContentPageType.MANUAL)) {
return redirectTo(request, "admin_error");
}
try {
await prisma.contentPage.update({
where: { id },
data: {
type: typeValue as ContentPageType,
slug,
title,
content,
sortOrder: Number.isNaN(sortOrder) ? 0 : sortOrder,
isPublished,
},
});
return redirectTo(request, "content_updated");
} catch {
return redirectTo(request, "admin_error");
}
}