"use server"; import { revalidatePath } from "next/cache"; import { requirePipelineAdmin } from "@/lib/render-pipeline/session-auth"; import { PipelineError } from "@/lib/render-pipeline/errors"; import { createMovReviewPackage, previewMovReviewPackage, } from "@/lib/render-pipeline/reviews"; /** * Server actions behind "Build MOV Review Package" on the shot-status page * (RenderPipeline2 ยง11.6). The heavy lifting lives in lib/render-pipeline; * these only carry the session and turn service errors into messages a toast * can show. */ function message(err: unknown): string { if (err instanceof PipelineError) return err.message; return err instanceof Error ? err.message : "Unknown error"; } /** What the confirm dialog shows: the folder, the resolved versions, the gaps. */ export async function previewMovReview(shotIds: string[]) { try { await requirePipelineAdmin(); const preview = await previewMovReviewPackage(shotIds); return { ok: true as const, ...preview }; } catch (err) { return { ok: false as const, error: message(err) }; } } export async function buildMovReview(shotIds: string[]) { try { const user = await requirePipelineAdmin(); const result = await createMovReviewPackage({ shotIds }, user.id); revalidatePath("/pipeline/deliveries"); return { ok: true as const, ...result }; } catch (err) { return { ok: false as const, error: message(err) }; } }