diff --git a/functions/api/uploads/status.ts b/functions/api/uploads/status.ts new file mode 100644 index 0000000..609baa8 --- /dev/null +++ b/functions/api/uploads/status.ts @@ -0,0 +1,44 @@ +export async function onRequestPost(context: RequestContext) { + const { body } = context.data; + + if ( + !Array.isArray(body) || + body.find((attachment) => typeof attachment !== "string") + ) + return new Response( + '{"error":"Request body must be an array of strings"}', + { + headers: { + "content-type": "application/json", + }, + status: 400, + }, + ); + + if (body.length > 3) + return new Response('{"error":"Too many video ids"}', { + headers: { + "content-type": "application/json", + }, + status: 400, + }); + + const kvPromises = []; + + for (const attachment of body) + kvPromises.push(context.env.DATA.get(`videoprocessing_${attachment}`)); + + const kvResults = await Promise.allSettled(kvPromises); + + if (kvResults.find((result) => result.status === "rejected")) + return new Response('{"error":"Failed to check status of attachments"}', { + headers: { + "content-type": "application/json", + }, + status: 500, + }); + + return new Response(null, { + status: kvResults.find((result) => result !== null) ? 409 : 204, + }); +}