import { auth } from "@/lib/auth"; import { prisma } from "@/lib/prisma"; import { repurposeImage, retoneCaption, getAvailableFormats } from "@/lib/repurpose"; export async function GET( _request: Request, { params }: { params: Promise<{ id: string }> } ) { const session = await auth(); if (!session) return new Response("Unauthorized", { status: 401 }); const { id } = await params; const asset = await prisma.asset.findUnique({ where: { id } }); if (!asset) return Response.json({ error: "Not found" }, { status: 404 }); const formats = getAvailableFormats(asset.dimensions); return Response.json({ formats, currentDimensions: asset.dimensions }); } export async function POST( request: Request, { params }: { params: Promise<{ id: string }> } ) { const session = await auth(); if (!session) return new Response("Unauthorized", { status: 401 }); const { id } = await params; const body = await request.json(); const { formats: targetFormats } = body as { formats: string[] }; const asset = await prisma.asset.findUnique({ where: { id } }); if (!asset) return Response.json({ error: "Not found" }, { status: 404 }); if (asset.type !== "image") { return Response.json({ error: "Only image assets can be repurposed" }, { status: 400 }); } const outputDir = `outputs/repurposed_${id.slice(0, 8)}`; const resized = await repurposeImage(asset.filePath, targetFormats, outputDir); const results = []; for (const file of resized) { const originalMeta = asset.metadata ? JSON.parse(asset.metadata) : {}; let newMeta = { ...originalMeta }; // Re-tone caption if platform changed and caption exists if (originalMeta.caption && asset.platform && file.platform !== asset.platform) { try { const newCaption = await retoneCaption( originalMeta.caption, asset.platform, file.platform ); newMeta = { ...newMeta, caption: newCaption, originalCaption: originalMeta.caption }; } catch { // Keep original caption if re-toning fails } } const newAsset = await prisma.asset.create({ data: { campaignId: asset.campaignId, type: "image", platform: file.platform, format: "png", filePath: file.filePath, fileName: file.fileName, dimensions: file.dimensions, metadata: JSON.stringify(newMeta), status: "draft", parentAssetId: asset.id, }, }); results.push(newAsset); } return Response.json({ created: results.length, assets: results }); }