From 250ae863d0c719637a7cb44f148385575e7ab7ca Mon Sep 17 00:00:00 2001 From: undefined Date: Tue, 1 Mar 2022 22:00:17 +0800 Subject: [PATCH] core: submissionPriority for rejudge --- packages/hydrooj/package.json | 2 +- packages/hydrooj/src/handler/problem.ts | 11 +++++++---- packages/hydrooj/src/handler/record.ts | 3 ++- packages/ui-default/backendlib/template.js | 1 - 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index c61594be..61304b0d 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "3.5.6", + "version": "3.5.7", "bin": "bin/hydrooj.js", "main": "src/loader", "module": "src/loader", diff --git a/packages/hydrooj/src/handler/problem.ts b/packages/hydrooj/src/handler/problem.ts index 9fa4eed5..aa3c60c5 100644 --- a/packages/hydrooj/src/handler/problem.ts +++ b/packages/hydrooj/src/handler/problem.ts @@ -380,10 +380,13 @@ export class ProblemDetailHandler extends ProblemHandler { async postRejudge(domainId: string, pid: number) { this.checkPerm(PERM.PERM_REJUDGE_PROBLEM); // TODO maybe async? - await record.getMulti(domainId, { pid }).forEach(async (doc) => { - await record.reset(domainId, doc._id, true); - await record.judge(domainId, doc._id, -50); - }); + const rdocs = await record.getMulti(domainId, { pid, contest: { $ne: new ObjectID('0'.repeat(24)) } }) + .project({ _id: 1 }).toArray(); + const priority = await record.submissionPriority(this.user._id, -rdocs.length * 5 - 50); + await Promise.all(rdocs.map( + (doc) => record.reset(domainId, doc._id, true) + .then(() => record.judge(domainId, doc._id, priority)), + )); this.back(); } diff --git a/packages/hydrooj/src/handler/record.ts b/packages/hydrooj/src/handler/record.ts index 2d460dba..59b0ec5f 100644 --- a/packages/hydrooj/src/handler/record.ts +++ b/packages/hydrooj/src/handler/record.ts @@ -144,10 +144,11 @@ class RecordDetailHandler extends Handler { @param('rid', Types.ObjectID) async postRejudge(domainId: string, rid: ObjectID) { this.checkPerm(PERM.PERM_REJUDGE); + const priority = await record.submissionPriority(this.user._id, -20); const rdoc = await record.get(domainId, rid); if (rdoc) { await record.reset(domainId, rid, true); - await record.judge(domainId, rid, -10); + await record.judge(domainId, rid, priority); } this.back(); } diff --git a/packages/ui-default/backendlib/template.js b/packages/ui-default/backendlib/template.js index 3b93861f..c0875aaf 100644 --- a/packages/ui-default/backendlib/template.js +++ b/packages/ui-default/backendlib/template.js @@ -3,7 +3,6 @@ const path = require('path'); const yaml = require('js-yaml'); const serialize = require('serialize-javascript'); const nunjucks = require('nunjucks'); -const { filter } = require('lodash'); const jsesc = require('jsesc'); const argv = require('cac')().parse(); const { findFileSync } = require('@hydrooj/utils/lib/utils');