Files
buzz-sheet/app/api/admin/media/[id]/complete/route.ts
T
gunshiz 87e6bcd96f
CI / Verify and audit (push) Successful in 2m33s
CI / Build, scan and deploy immutable images (push) Failing after 1m29s
feat : 6 astra improve it
2026-09-22 18:28:18 +07:00

38 lines
1.3 KiB
TypeScript

import { errorResponse, requireSameOrigin, withUploadSlot } from "@/lib/security/http";
import { limitRequest } from "@/lib/security/rate-limit";
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 }> },
) {
try {
requireSameOrigin(request);
const admin = await requireAdmin();
await limitRequest("media", admin.user.id, 20);
const { id } = await context.params;
if (!z.string().uuid().safeParse(id).success) {
return Response.json({ error: "invalid-id" }, { status: 400 });
}
const result = await withUploadSlot(() => 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 });
} catch (cause) {
return errorResponse(cause);
}
}