mycofi-earth-website/app/api/zine/outline/route.ts

61 lines
1.6 KiB
TypeScript

import { NextRequest, NextResponse } from "next/server";
import { generateOutline } from "@/lib/gemini";
import { saveZine, type StoredZine } from "@/lib/storage";
import { generateZineId } from "@/lib/utils";
export async function POST(request: NextRequest) {
try {
const body = await request.json();
const { topic, style = "mycelial", tone = "regenerative" } = body;
if (!topic || typeof topic !== "string" || topic.trim().length === 0) {
return NextResponse.json(
{ error: "Topic is required" },
{ status: 400 }
);
}
// Generate the 8-page outline using Gemini
const pages = await generateOutline(topic.trim(), style, tone);
if (!pages || pages.length !== 8) {
return NextResponse.json(
{ error: "Failed to generate complete outline" },
{ status: 500 }
);
}
// Create a new zine ID
const id = generateZineId();
const now = new Date().toISOString();
// Save initial zine metadata
const zine: StoredZine = {
id,
topic: topic.trim(),
style,
tone,
outline: pages,
pages: [], // Will be populated as images are generated
createdAt: now,
updatedAt: now,
};
await saveZine(zine);
return NextResponse.json({
id,
topic: topic.trim(),
style,
tone,
outline: pages,
});
} catch (error) {
console.error("Outline generation error:", error);
return NextResponse.json(
{ error: error instanceof Error ? error.message : "Failed to generate outline" },
{ status: 500 }
);
}
}