Commit 1471381c authored by Yechang's avatar Yechang
Browse files

feat(submission): create feedback when judge completed

parent 058d325e
Loading
Loading
Loading
Loading
Loading
+12 −4
Original line number Diff line number Diff line
import { redis } from '$lib/server/redis';

const getQueueName = (program: string) => `lms:program:${program}:processQueue`;

export async function pushProcessInQueue(program: string, processId: string) {
	const queueName = getQueueName(program);
	await redis.rpush(queueName, processId);
	const key = `lms:program:${program}:process:queue`;
	await redis.rpush(key, processId);
}

export async function linkProcessToSubmission(processId: string, submission: string) {
	const key = `lms:process:${processId}:submission`;
	await redis.set(key, submission);
}

export async function getSubmissionFromProcess(processId: string) {
	const key = `lms:process:${processId}:submission`;
	return await redis.get(key);
}
 No newline at end of file
+2 −2
Original line number Diff line number Diff line
import { OAuth2Client } from 'oslo/oauth2';
import { env } from '$env/dynamic/private';

const clientId = env.CLIENT_ID || '0dd5629b-7e57-4b58-b334-78a874ce52da';
export const credentials = env.CLIENT_SECRET || 't3Ta-4jj2GKNDj7FndPpi33chl';
const clientId = env.CLIENT_ID || 'cb35ce6f-fa02-4b05-af36-4fb2331b22d8';
export const credentials = env.CLIENT_SECRET || 'ZI_Q2XevoJvprsxLi1~V5WcXOf';
const redirectURI = env.CLIENT_CALLBACK || 'http://sustech-lms.localhost/auth/callback';

const authorizeEndpoint = 'https://sso.sustech.cloud/oauth2/auth';
+15 −1
Original line number Diff line number Diff line
@@ -42,7 +42,11 @@ export const canSubmit = async (submitterId: number, problemId: number): Promise
	return true;
};

export const createSubmission = async ({ problemId, submitterId, volumeId }: CreateSubmissionSchema) => {
export const createSubmission = async ({
	problemId,
	submitterId,
	volumeId
}: CreateSubmissionSchema) => {
	const file = await db.file.findFirst({
		where: { id: volumeId }
	});
@@ -149,3 +153,13 @@ export const getSubmission = async (id: number) => {
	});
	return submission;
};

export const getSubmissionByName = async (name: string) => {
	const submission = await db.submission.findFirst({
		where: { name },
		include: {
			problem: true
		}
	});
	return submission;
};
+2 −0
Original line number Diff line number Diff line
@@ -84,4 +84,6 @@ export const execute = async ({ program, inputs }: CommandSchema) => {
			}
		}
	});

	return process;
};
+74 −63
Original line number Diff line number Diff line
@@ -2,7 +2,8 @@ import { z } from 'zod';

export const messageSchema = z.object({ data: z.string(), omittedLength: z.number() }).or(z.string())

export const contentSchema = z.discriminatedUnion('type', [
export const contentSchema = z
	.discriminatedUnion('type', [
		z.object({
			type: z.literal('ansi'),
			value: messageSchema
@@ -32,37 +33,47 @@ export const contentSchema = z.discriminatedUnion('type', [
				.array()
		}),
		z.object({
        type: z.literal("status"),
			type: z.literal('status'),
			value: z.enum([
            "CompilationError",
            "JudgementFailed",
            "ConfigurationError",
            "SystemError",
            "FileError",
				'CompilationError',
				'JudgementFailed',
				'ConfigurationError',
				'SystemError',
				'FileError',

            "Accepted",
            "FileError",
            "RuntimeError",
            "TimeLimitExceeded",
            "MemoryLimitExceeded",
            "OutputLimitExceeded",
            "PartiallyCorrect",
            "WrongAnswer",
            "JudgementFailed"
				'Accepted',
				'FileError',
				'RuntimeError',
				'TimeLimitExceeded',
				'MemoryLimitExceeded',
				'OutputLimitExceeded',
				'PartiallyCorrect',
				'WrongAnswer',
				'JudgementFailed'
			])
		}),
		z.object({
        type: z.literal("score"),
			type: z.literal('score'),
			value: z.number()
		}),
		z.object({
        type: z.literal("carp-testcases"),
        testcases: z.array(z.object({
			type: z.literal('carp-testcases'),
			testcases: z.array(
				z.object({
					stdout: z.string(),
					stderr: z.string(),
					message: z.string(),
					score: z.number()
        }))
				})
			)
		}),
		z.object({
			type: z.literal('message'),
			message: z.string()
		}),
		z.object({
			type: z.literal('time-usage'),
			value: z.number()
		})
	])
	.array();
 No newline at end of file
Loading