30 lines
928 B
TypeScript
30 lines
928 B
TypeScript
import * as z from "zod";
|
|
|
|
import { requireAdmin } from "@/lib/auth/server";
|
|
import { completePendingMedia } from "@/lib/media/repository";
|
|
|
|
export async function POST(
|
|
_request: Request,
|
|
context: { params: Promise<{ id: string }> },
|
|
) {
|
|
await requireAdmin();
|
|
const { id } = await context.params;
|
|
if (!z.string().uuid().safeParse(id).success) {
|
|
return Response.json({ error: "invalid-id" }, { status: 400 });
|
|
}
|
|
const result = await completePendingMedia(id);
|
|
if (result.status === "ready") {
|
|
return Response.json({
|
|
media: {
|
|
id: result.media.id,
|
|
fileName: result.media.fileName,
|
|
mimeType: result.media.mimeType,
|
|
byteSize: result.media.byteSize,
|
|
url: `/media/${result.media.id}`,
|
|
},
|
|
});
|
|
}
|
|
const status = result.status === "not-found" ? 404 : result.status === "missing" ? 409 : 422;
|
|
return Response.json({ error: result.status }, { status });
|
|
}
|