initial push
This commit is contained in:
54
src/app/api/admin/content/update/route.ts
Normal file
54
src/app/api/admin/content/update/route.ts
Normal 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");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user