Ratankumar10/code-execution
0
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 