44 lines
1.2 KiB
TypeScript
44 lines
1.2 KiB
TypeScript
import { createClient } from "https://esm.sh/@supabase/supabase-js";
|
|
|
|
// http://127.0.0.1:54321/functions/v1/fresh-challenges
|
|
// Auto get judging status from remote lawyers
|
|
|
|
Deno.serve(async (req) => {
|
|
try {
|
|
const client = createClient(
|
|
Deno.env.get("SUPABASE_URL") ?? "",
|
|
Deno.env.get("SUPABASE_SERVICE_ROLE_KEY") ?? ""
|
|
);
|
|
|
|
const body = await req.json();
|
|
|
|
const { data } = await client
|
|
.from("challenges")
|
|
.select<any, any>("*")
|
|
.eq("status", "judging")
|
|
.eq("id", body.id)
|
|
.single();
|
|
|
|
if (data == null || data?.details?.submissions == null) {
|
|
return new Response(String("Unable to find the challenge with the id in the request."), { status: 400 });
|
|
}
|
|
|
|
const tokens = data?.details?.submissions
|
|
.map((item: { token: string }) => item.token)
|
|
.join(",");
|
|
|
|
const resp = await fetch(
|
|
Deno.env.get("JUDGE0_ENDPOINT") + `/submissions/batch?tokens=${tokens}`,
|
|
{ method: "GET" }
|
|
);
|
|
|
|
const result = await resp.json();
|
|
|
|
return new Response(JSON.stringify({ result }), {
|
|
headers: { "Content-Type": "application/json" },
|
|
status: 200
|
|
});
|
|
} catch (err) {
|
|
return new Response(String(err?.message ?? err), { status: 500 });
|
|
}
|
|
}); |