40 lines
1.2 KiB
TypeScript
40 lines
1.2 KiB
TypeScript
import { NextResponse } from "next/server";
|
|
import { z } from "zod";
|
|
|
|
import { requireApiAccess } from "../../../../lib/api/auth";
|
|
import { copyOptimizationRequestSchema } from "../../../../lib/domain/validation";
|
|
import { LlmValidationError } from "../../../../lib/llm/client";
|
|
import { optimizeRenweiCopy } from "../../../../lib/workflow/renwei-copy-optimizer";
|
|
|
|
export async function POST(request: Request) {
|
|
const access = requireApiAccess(request);
|
|
if (!access.ok) {
|
|
return access.response;
|
|
}
|
|
|
|
try {
|
|
const payload = copyOptimizationRequestSchema.parse(await request.json());
|
|
const result = await optimizeRenweiCopy(payload);
|
|
return NextResponse.json({ result });
|
|
} catch (error) {
|
|
return jsonError(error, getErrorStatus(error));
|
|
}
|
|
}
|
|
|
|
function jsonError(error: unknown, status: number) {
|
|
const message =
|
|
error instanceof z.ZodError
|
|
? "请输入需要优化的文案"
|
|
: error instanceof Error
|
|
? error.message
|
|
: "文案优化失败";
|
|
|
|
return NextResponse.json({ error: message }, { status });
|
|
}
|
|
|
|
function getErrorStatus(error: unknown) {
|
|
if (error instanceof LlmValidationError) return 502;
|
|
if (error instanceof Error && /^LLM\b|provider/i.test(error.message)) return 502;
|
|
return 400;
|
|
}
|