72 lines
2.1 KiB
TypeScript
72 lines
2.1 KiB
TypeScript
import { NextRequest, NextResponse } from "next/server";
|
|
import { prisma } from "@/lib/prisma";
|
|
import { requireSessionAuth } from "@/lib/auth";
|
|
|
|
export async function GET(
|
|
request: NextRequest,
|
|
{ params }: { params: Promise<{ id: string }> },
|
|
) {
|
|
const isAdminRequest = request.headers.get("x-admin-request") === "true";
|
|
if (!isAdminRequest) return NextResponse.json({ error: "Admin access required" }, { status: 403 });
|
|
const authError = requireSessionAuth(request);
|
|
if (authError) return authError;
|
|
|
|
const { id: idParam } = await params;
|
|
const id = parseInt(idParam, 10);
|
|
if (!Number.isFinite(id)) return NextResponse.json({ error: "Invalid project id" }, { status: 400 });
|
|
|
|
const { searchParams } = new URL(request.url);
|
|
const locale = searchParams.get("locale") || "en";
|
|
|
|
const translation = await prisma.projectTranslation.findFirst({
|
|
where: { projectId: id, locale },
|
|
});
|
|
|
|
return NextResponse.json({ translation });
|
|
}
|
|
|
|
export async function PUT(
|
|
request: NextRequest,
|
|
{ params }: { params: Promise<{ id: string }> },
|
|
) {
|
|
const isAdminRequest = request.headers.get("x-admin-request") === "true";
|
|
if (!isAdminRequest) return NextResponse.json({ error: "Admin access required" }, { status: 403 });
|
|
const authError = requireSessionAuth(request);
|
|
if (authError) return authError;
|
|
|
|
const { id: idParam } = await params;
|
|
const id = parseInt(idParam, 10);
|
|
if (!Number.isFinite(id)) return NextResponse.json({ error: "Invalid project id" }, { status: 400 });
|
|
|
|
const body = (await request.json()) as {
|
|
locale?: string;
|
|
title?: string;
|
|
description?: string;
|
|
};
|
|
|
|
const locale = body.locale || "en";
|
|
const title = body.title?.trim();
|
|
const description = body.description?.trim();
|
|
|
|
if (!title || !description) {
|
|
return NextResponse.json({ error: "title and description are required" }, { status: 400 });
|
|
}
|
|
|
|
const saved = await prisma.projectTranslation.upsert({
|
|
where: { projectId_locale: { projectId: id, locale } },
|
|
create: {
|
|
projectId: id,
|
|
locale,
|
|
title,
|
|
description,
|
|
},
|
|
update: {
|
|
title,
|
|
description,
|
|
},
|
|
});
|
|
|
|
return NextResponse.json({ translation: saved });
|
|
}
|
|
|