From a72175144e2c2fc5b1010c2d4e55a8a0a0cbe461 Mon Sep 17 00:00:00 2001 From: undefined Date: Sun, 10 Nov 2024 15:23:51 +0800 Subject: [PATCH] core: add lang to tsdoc.journal --- packages/hydrooj/src/handler/judge.ts | 8 ++------ packages/hydrooj/src/model/contest.ts | 24 +++++++++++------------- 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/packages/hydrooj/src/handler/judge.ts b/packages/hydrooj/src/handler/judge.ts index c7c32b7ae..c474f7427 100644 --- a/packages/hydrooj/src/handler/judge.ts +++ b/packages/hydrooj/src/handler/judge.ts @@ -86,12 +86,8 @@ export async function postJudge(rdoc: RecordDoc) { if (rdoc.contest?.toString().startsWith('0'.repeat(23))) return; const accept = rdoc.status === builtin.STATUS.STATUS_ACCEPTED; const updated = await problem.updateStatus(rdoc.domainId, rdoc.pid, rdoc.uid, rdoc._id, rdoc.status, rdoc.score); - if (rdoc.contest) { - await contest.updateStatus( - rdoc.domainId, rdoc.contest, rdoc.uid, rdoc._id, - rdoc.pid, rdoc.status, rdoc.score, rdoc.subtasks, - ); - } else if (accept && updated) await domain.incUserInDomain(rdoc.domainId, rdoc.uid, 'nAccept', 1); + if (rdoc.contest) await contest.updateStatus(rdoc.domainId, rdoc.contest, rdoc.uid, rdoc._id, rdoc.pid, rdoc); + else if (accept && updated) await domain.incUserInDomain(rdoc.domainId, rdoc.uid, 'nAccept', 1); const isNormalSubmission = ![ STATUS.STATUS_ETC, STATUS.STATUS_HACK_SUCCESSFUL, STATUS.STATUS_HACK_UNSUCCESSFUL, STATUS.STATUS_FORMAT_ERROR, STATUS.STATUS_SYSTEM_ERROR, STATUS.STATUS_CANCELED, diff --git a/packages/hydrooj/src/model/contest.ts b/packages/hydrooj/src/model/contest.ts index fa27815f2..4dd94dcf4 100644 --- a/packages/hydrooj/src/model/contest.ts +++ b/packages/hydrooj/src/model/contest.ts @@ -849,27 +849,25 @@ export async function getStatus(domainId: string, tid: ObjectId, uid: number) { return await document.getStatus(domainId, document.TYPE_CONTEST, tid, uid); } -async function _updateStatus( - tdoc: Tdoc, uid: number, rid: ObjectId, pid: number, status: STATUS, score: number, - subtasks: Record, +export async function updateStatus( + domainId: string, tid: ObjectId, uid: number, rid: ObjectId, pid: number, + { + status = STATUS.STATUS_WAITING, + score = 0, + subtasks, + lang, + }: { status?: STATUS, score?: number, subtasks?: Record, lang?: string } = {}, ) { + const tdoc = await get(domainId, tid); + if (tdoc.balloon && status === STATUS.STATUS_ACCEPTED) await addBalloon(domainId, tid, uid, rid, pid); const tsdoc = await document.revPushStatus(tdoc.domainId, document.TYPE_CONTEST, tdoc.docId, uid, 'journal', { - rid, pid, status, score, subtasks, + rid, pid, status, score, subtasks, lang, }, 'rid'); const journal = _getStatusJournal(tsdoc); const stats = RULES[tdoc.rule].stat(tdoc, journal); return await document.revSetStatus(tdoc.domainId, document.TYPE_CONTEST, tdoc.docId, uid, tsdoc.rev, { journal, ...stats }); } -export async function updateStatus( - domainId: string, tid: ObjectId, uid: number, rid: ObjectId, pid: number, - status = STATUS.STATUS_WRONG_ANSWER, score = 0, subtasks: Record = {}, -) { - const tdoc = await get(domainId, tid); - if (tdoc.balloon && status === STATUS.STATUS_ACCEPTED) await addBalloon(domainId, tid, uid, rid, pid); - return await _updateStatus(tdoc, uid, rid, pid, status, score, subtasks); -} - export async function getListStatus(domainId: string, uid: number, tids: ObjectId[]) { const r = {}; // eslint-disable-next-line no-await-in-loop