mirror of
https://github.com/massbug/judge4c.git
synced 2026-10-15 15:17:31 +00:00
feat(judge): refactor submission pipeline to async processing
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
Warnings:
|
||||
|
||||
- You are about to drop the `TestcaseResult` table. If the table is not empty, all the data it contains will be lost.
|
||||
|
||||
*/
|
||||
-- CreateEnum
|
||||
CREATE TYPE "JudgeStatus" AS ENUM ('COMPILING', 'COMPILATION_ERROR', 'RUNNING', 'ACCEPTED', 'WRONG_ANSWER', 'TIME_LIMIT_EXCEEDED', 'MEMORY_LIMIT_EXCEEDED', 'RUNTIME_ERROR', 'OUTPUT_LIMIT_EXCEEDED', 'SYSTEM_ERROR');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "JudgeRunStatus" AS ENUM ('ACCEPTED', 'WRONG_ANSWER', 'TIME_LIMIT_EXCEEDED', 'MEMORY_LIMIT_EXCEEDED', 'RUNTIME_ERROR', 'OUTPUT_LIMIT_EXCEEDED', 'SYSTEM_ERROR');
|
||||
|
||||
-- DropForeignKey
|
||||
ALTER TABLE "TestcaseResult" DROP CONSTRAINT "TestcaseResult_submissionId_fkey";
|
||||
|
||||
-- DropForeignKey
|
||||
ALTER TABLE "TestcaseResult" DROP CONSTRAINT "TestcaseResult_testcaseId_fkey";
|
||||
|
||||
-- DropTable
|
||||
DROP TABLE "TestcaseResult";
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Judge" (
|
||||
"id" TEXT NOT NULL,
|
||||
"submissionId" TEXT NOT NULL,
|
||||
"status" "JudgeStatus" NOT NULL,
|
||||
"startTime" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"endTime" TIMESTAMP(3),
|
||||
"compileOutput" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "Judge_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "JudgeRun" (
|
||||
"id" TEXT NOT NULL,
|
||||
"judgeId" TEXT NOT NULL,
|
||||
"testcaseId" TEXT NOT NULL,
|
||||
"status" "JudgeRunStatus" NOT NULL,
|
||||
"timeUsage" INTEGER,
|
||||
"memoryUsage" INTEGER,
|
||||
"stdin" TEXT,
|
||||
"stdout" TEXT,
|
||||
"stderr" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "JudgeRun_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Judge_submissionId_key" ON "Judge"("submissionId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "JudgeRun_judgeId_idx" ON "JudgeRun"("judgeId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "JudgeRun_testcaseId_idx" ON "JudgeRun"("testcaseId");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Judge" ADD CONSTRAINT "Judge_submissionId_fkey" FOREIGN KEY ("submissionId") REFERENCES "Submission"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "JudgeRun" ADD CONSTRAINT "JudgeRun_judgeId_fkey" FOREIGN KEY ("judgeId") REFERENCES "Judge"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "JudgeRun" ADD CONSTRAINT "JudgeRun_testcaseId_fkey" FOREIGN KEY ("testcaseId") REFERENCES "Testcase"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
+63
-21
@@ -50,6 +50,29 @@ enum Status {
|
||||
SE // System Error
|
||||
}
|
||||
|
||||
enum JudgeStatus {
|
||||
COMPILING
|
||||
COMPILATION_ERROR
|
||||
RUNNING
|
||||
ACCEPTED
|
||||
WRONG_ANSWER
|
||||
TIME_LIMIT_EXCEEDED
|
||||
MEMORY_LIMIT_EXCEEDED
|
||||
RUNTIME_ERROR
|
||||
OUTPUT_LIMIT_EXCEEDED
|
||||
SYSTEM_ERROR
|
||||
}
|
||||
|
||||
enum JudgeRunStatus {
|
||||
ACCEPTED
|
||||
WRONG_ANSWER
|
||||
TIME_LIMIT_EXCEEDED
|
||||
MEMORY_LIMIT_EXCEEDED
|
||||
RUNTIME_ERROR
|
||||
OUTPUT_LIMIT_EXCEEDED
|
||||
SYSTEM_ERROR
|
||||
}
|
||||
|
||||
enum ProblemContentType {
|
||||
TITLE
|
||||
DESCRIPTION
|
||||
@@ -138,8 +161,8 @@ model Submission {
|
||||
timeUsage Int?
|
||||
memoryUsage Int?
|
||||
|
||||
testcaseResults TestcaseResult[]
|
||||
codeAnalysis CodeAnalysis?
|
||||
judge Judge?
|
||||
codeAnalysis CodeAnalysis?
|
||||
|
||||
userId String
|
||||
problemId String
|
||||
@@ -158,6 +181,42 @@ model Submission {
|
||||
@@index([createdAt])
|
||||
}
|
||||
|
||||
model Judge {
|
||||
id String @id @default(cuid())
|
||||
submissionId String @unique
|
||||
status JudgeStatus
|
||||
startTime DateTime @default(now())
|
||||
endTime DateTime?
|
||||
compileOutput String?
|
||||
|
||||
submission Submission @relation(fields: [submissionId], references: [id], onDelete: Cascade)
|
||||
judgeRuns JudgeRun[]
|
||||
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
}
|
||||
|
||||
model JudgeRun {
|
||||
id String @id @default(cuid())
|
||||
judgeId String
|
||||
testcaseId String
|
||||
status JudgeRunStatus
|
||||
timeUsage Int?
|
||||
memoryUsage Int?
|
||||
stdin String?
|
||||
stdout String?
|
||||
stderr String?
|
||||
|
||||
judge Judge @relation(fields: [judgeId], references: [id], onDelete: Cascade)
|
||||
testcase Testcase @relation(fields: [testcaseId], references: [id], onDelete: Cascade)
|
||||
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
@@index([judgeId])
|
||||
@@index([testcaseId])
|
||||
}
|
||||
|
||||
model Course {
|
||||
id String @id @default(cuid())
|
||||
title String
|
||||
@@ -262,8 +321,8 @@ model Testcase {
|
||||
id String @id @default(cuid())
|
||||
expectedOutput String
|
||||
|
||||
inputs TestcaseInput[]
|
||||
testcaseResults TestcaseResult[]
|
||||
inputs TestcaseInput[]
|
||||
judgeRuns JudgeRun[]
|
||||
|
||||
problemId String
|
||||
|
||||
@@ -284,23 +343,6 @@ model TestcaseInput {
|
||||
testcase Testcase @relation(fields: [testcaseId], references: [id], onDelete: Cascade)
|
||||
}
|
||||
|
||||
model TestcaseResult {
|
||||
id String @id @default(cuid())
|
||||
isCorrect Boolean
|
||||
output String?
|
||||
timeUsage Int?
|
||||
memoryUsage Int?
|
||||
|
||||
submissionId String
|
||||
testcaseId String
|
||||
|
||||
submission Submission @relation(fields: [submissionId], references: [id], onDelete: Cascade)
|
||||
testcase Testcase @relation(fields: [testcaseId], references: [id], onDelete: Cascade)
|
||||
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
}
|
||||
|
||||
model DockerConfig {
|
||||
language Language @id
|
||||
image String
|
||||
|
||||
+1255
-8
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user