Team Ai
Apppublic

Ratankumar10/code-execution

sourceHugging Faceupdated 8mo agoView on Hugging Face
0likes
judge.route.js81 linesDownload Raw Back to routes
1const express = require("express");2const router = express.Router();3const { validateJudge } = require("../middleware/validate.middleware");4const { rateLimiter } = require("../middleware/rateLimit.middleware");5const judgeService = require("../services/judge.service");6const queueService = require("../services/queue.service");7const logger = require("../utils/logger.util");8 9// ─── POST /api/judge ─────────────────────────10// Run code against multiple test cases and compare outputs11router.post("/judge", rateLimiter, validateJudge, async (req, res, next) => {12  try {13    const { language, code, testCases, timeLimit, memoryLimit } = req.body;14 15    logger.info(16      `⚖️  Judge request: lang=${language}, testCases=${testCases.length}, timeLimit=${timeLimit}s, memLimit=${memoryLimit}MB`,17    );18 19    const result = await queueService.enqueue(() =>20      judgeService.judge({ language, code, testCases, timeLimit, memoryLimit }),21    );22 23    logger.info(24      `📊 Judge result: verdict=${result.overallVerdict}, passed=${result.passed}/${result.totalTestCases}, totalTime=${result.totalTime}ms, maxMemory=${result.maxMemory}KB`,25    );26 27    res.json({28      success: true,29      data: result,30    });31  } catch (err) {32    next(err);33  }34});35 36// ─── POST /api/batch-judge ───────────────────37// Run multiple submissions (useful for problem testing)38router.post("/batch-judge", rateLimiter, async (req, res, next) => {39  try {40    const { submissions } = req.body;41 42    if (!Array.isArray(submissions) || submissions.length === 0) {43      return res.status(400).json({44        success: false,45        error: "Validation Error",46        details: ["submissions must be a non-empty array"],47      });48    }49 50    if (submissions.length > 10) {51      return res.status(400).json({52        success: false,53        error: "Validation Error",54        details: ["Maximum 10 submissions per batch"],55      });56    }57 58    logger.info(`📦 Batch judge: ${submissions.length} submissions`);59 60    const results = [];61    for (const submission of submissions) {62      const result = await queueService.enqueue(() =>63        judgeService.judge(submission),64      );65      results.push(result);66    }67 68    res.json({69      success: true,70      data: {71        total: results.length,72        results,73      },74    });75  } catch (err) {76    next(err);77  }78});79 80module.exports = router;81