import { createClient } from "https://esm.sh/@supabase/supabase-js"; import { runChallenge } from "./runners/index.ts"; // http://127.0.0.1:54321/functions/v1/judge-challenges // Judge all status is submitted challenges Deno.serve(async (_) => { try { const client = createClient( Deno.env.get("SUPABASE_URL") ?? "", Deno.env.get("SUPABASE_SERVICE_ROLE_KEY") ?? "" ); const { data, error } = await client .from("challenges") .select("*") .eq("status", "submitted") .limit(20); if (error) { throw error; } let counter = 0; for (const item of data) { const { data: problem } = await client .from("problems") .select("*") .eq("id", item.problem) .single(); if (problem == null) { throw new Error("Problem was not found."); } const { data: cases } = await client .from("problem_cases") .select("*") .eq("problem", problem.id); const result = await runChallenge(item, problem, cases); await client .from("challenges") .update({ status: result.status === "skipped" ? "finished" : "judging", details: result }) .eq("id", item.id); counter++; } return new Response(JSON.stringify({ judged: counter }), { headers: { "Content-Type": "application/json" }, status: 200 }); } catch (err) { return new Response(String(err?.message ?? err), { status: 500 }); } });