From ccc8ee23f28f3f5e6340b23a91339d288840162f Mon Sep 17 00:00:00 2001 From: undefined Date: Sun, 8 Nov 2020 02:58:02 +0800 Subject: [PATCH] =?UTF-8?q?core:=20=E4=BF=AE=E5=A4=8Dcontest-scoreboard?= =?UTF-8?q?=E4=B8=8D=E8=BF=9B=E8=A1=8C=E6=8E=92=E5=BA=8F=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/hydrooj/package.json | 2 +- packages/hydrooj/src/handler/contest.ts | 3 +++ packages/hydrooj/src/handler/homework.ts | 3 +++ packages/hydrooj/src/handler/problem.ts | 1 + packages/hydrooj/src/model/contest.ts | 2 +- 5 files changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index ae00d8734..df45e74fa 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.13.42", + "version": "2.13.43", "bin": "bin/hydrooj.js", "main": "dist/loader.js", "typings": "dist/loader.d.ts", diff --git a/packages/hydrooj/src/handler/contest.ts b/packages/hydrooj/src/handler/contest.ts index f1dda911b..9b9aa13a1 100644 --- a/packages/hydrooj/src/handler/contest.ts +++ b/packages/hydrooj/src/handler/contest.ts @@ -12,6 +12,7 @@ import { PERM, PRIV, CONSTANT } from '../model/builtin'; import * as contest from '../model/contest'; import * as document from '../model/document'; import * as problem from '../model/problem'; +import * as domain from '../model/domain'; import * as record from '../model/record'; import * as user from '../model/user'; import * as message from '../model/message'; @@ -308,6 +309,8 @@ class ContestProblemSubmitHandler extends ContestProblemHandler { }); const [rdoc] = await Promise.all([ record.get(domainId, rid), + problem.inc(domainId, this.pdoc.docId, 'nSubmit', 1), + domain.incUserInDomain(domainId, this.user._id, 'nSubmit'), contest.updateStatus(domainId, this.tdoc.docId, this.user._id, rid, this.pdoc.docId), ]); bus.boardcast('record/change', rdoc); diff --git a/packages/hydrooj/src/handler/homework.ts b/packages/hydrooj/src/handler/homework.ts index 9189feb1c..65a06f934 100644 --- a/packages/hydrooj/src/handler/homework.ts +++ b/packages/hydrooj/src/handler/homework.ts @@ -12,6 +12,7 @@ import { Route, Handler, Types, param, } from '../service/server'; import * as bus from '../service/bus'; +import * as domain from '../model/domain'; import { PERM, CONSTANT } from '../model/builtin'; import * as user from '../model/user'; import * as contest from '../model/contest'; @@ -186,6 +187,8 @@ class HomeworkDetailProblemSubmitHandler extends HomeworkDetailProblemHandler { }); const [rdoc] = await Promise.all([ record.get(domainId, rid), + problem.inc(domainId, pid, 'nSubmit', 1), + domain.incUserInDomain(domainId, this.user._id, 'nSubmit'), contest.updateStatus(domainId, tid, this.user._id, rid, pid, false, 0, document.TYPE_HOMEWORK), ]); diff --git a/packages/hydrooj/src/handler/problem.ts b/packages/hydrooj/src/handler/problem.ts index 5b100f755..c0ec4879f 100644 --- a/packages/hydrooj/src/handler/problem.ts +++ b/packages/hydrooj/src/handler/problem.ts @@ -282,6 +282,7 @@ export class ProblemSubmitHandler extends ProblemDetailHandler { const rid = await record.add(domainId, this.pdoc.docId, this.user._id, lang, code, true); const [rdoc] = await Promise.all([ record.get(domainId, rid), + problem.inc(domainId, this.pdoc.docId, 'nSubmit', 1), domain.incUserInDomain(domainId, this.user._id, 'nSubmit'), ]); bus.boardcast('record/change', rdoc); diff --git a/packages/hydrooj/src/model/contest.ts b/packages/hydrooj/src/model/contest.ts index d9ff1ba2e..1b808f38b 100644 --- a/packages/hydrooj/src/model/contest.ts +++ b/packages/hydrooj/src/model/contest.ts @@ -495,7 +495,7 @@ export const ContestHandlerMixin = (c) => class extends c { ): Promise<[Tdoc, ScoreboardNode[][], Udict]> { const tdoc = await get(domainId, tid, docType); if (!this.canShowScoreboard(tdoc)) throw new ContestScoreboardHiddenError(tid); - const tsdocs = await getMultiStatus(domainId, { docId: tid }, docType).toArray(); + const tsdocs = await getMultiStatus(domainId, { docId: tid }, docType).sort(RULES[tdoc.rule].statusSort).toArray(); const uids = tsdocs.map((tsdoc) => tsdoc.uid); const [udict, pdict] = await Promise.all([ user.getList(domainId, uids),