From 3daafe5396c6182b31b8152a45338853a8924d6d Mon Sep 17 00:00:00 2001 From: undefined Date: Thu, 10 Feb 2022 20:32:17 +0800 Subject: [PATCH] core: bug fix --- packages/hydrooj/package.json | 2 +- packages/hydrooj/src/handler/contest.ts | 22 +++++++------ packages/hydrooj/src/handler/homework.ts | 40 +++++++++++++----------- 3 files changed, 36 insertions(+), 28 deletions(-) diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 5d5122fe4..16debde2f 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "3.4.17", + "version": "3.4.18", "bin": "bin/hydrooj.js", "main": "src/loader", "module": "src/loader", diff --git a/packages/hydrooj/src/handler/contest.ts b/packages/hydrooj/src/handler/contest.ts index bfd88fe08..e2b1181c8 100644 --- a/packages/hydrooj/src/handler/contest.ts +++ b/packages/hydrooj/src/handler/contest.ts @@ -94,12 +94,17 @@ export class ContestDetailHandler extends Handler { @param('tid', Types.ObjectID) @param('page', Types.PositiveInt, true) async get(domainId: string, tid: ObjectID, page = 1) { - const tdoc = await contest.get(domainId, tid); - this.response.template = 'contest_detail.html'; - const [tsdoc, pdict] = await Promise.all([ - contest.getStatus(domainId, tdoc.docId, this.user._id), - problem.getList(domainId, tdoc.pids, true), + const [tdoc, tsdoc] = await Promise.all([ + contest.get(domainId, tid), + contest.getStatus(domainId, tid, this.user._id), ]); + this.response.template = 'contest_detail.html'; + const udict = await user.getList(domainId, [tdoc.owner]); + this.response.body = { + tdoc, tsdoc, udict, page, + }; + if (contest.isNotStarted(tdoc)) return; + const pdict = await problem.getList(domainId, tdoc.pids, true); const psdict = {}; let rdict = {}; if (tsdoc) { @@ -112,10 +117,9 @@ export class ContestDetailHandler extends Handler { for (const i in psdict) rdict[psdict[i].rid] = { _id: psdict[i].rid }; } } - const udict = await user.getList(domainId, [tdoc.owner]); - this.response.body = { - tdoc, tsdoc, udict, pdict, psdict, rdict, page, - }; + this.response.body.pdict = pdict; + this.response.body.psdict = psdict; + this.response.body.rdict = rdict; } @param('tid', Types.ObjectID) diff --git a/packages/hydrooj/src/handler/homework.ts b/packages/hydrooj/src/handler/homework.ts index b45939069..a6f951d60 100644 --- a/packages/hydrooj/src/handler/homework.ts +++ b/packages/hydrooj/src/handler/homework.ts @@ -55,12 +55,26 @@ class HomeworkDetailHandler extends Handler { @param('tid', Types.ObjectID) @param('page', Types.PositiveInt, true) async get(domainId: string, tid: ObjectID, page = 1) { - const tdoc = await contest.get(domainId, tid); - if (tdoc.rule !== 'homework') throw new ContestNotFoundError(domainId, tid); - const [tsdoc, pdict] = await Promise.all([ - contest.getStatus(domainId, tdoc.docId, this.user._id), - problem.getList(domainId, tdoc.pids, true), + const [tdoc, tsdoc] = await Promise.all([ + contest.get(domainId, tid), + contest.getStatus(domainId, tid, this.user._id), ]); + if (tdoc.rule !== 'homework') throw new ContestNotFoundError(domainId, tid); + // discussion + const [ddocs, dpcount, dcount] = await paginate( + discussion.getMulti(domainId, { parentType: tdoc.docType, parentId: tdoc.docId }), + page, + system.get('pagination.discussion'), + ); + const uids = ddocs.map((ddoc) => ddoc.owner); + uids.push(tdoc.owner); + const udict = await user.getList(domainId, uids); + this.response.template = 'homework_detail.html'; + this.response.body = { + tdoc, tsdoc, udict, ddocs, page, dpcount, dcount, + }; + if (contest.isNotStarted(tdoc)) return; + const pdict = await problem.getList(domainId, tdoc.pids, true); const psdict = {}; let rdict = {}; if (tsdoc) { @@ -75,19 +89,9 @@ class HomeworkDetailHandler extends Handler { ); } } - // discussion - const [ddocs, dpcount, dcount] = await paginate( - discussion.getMulti(domainId, { parentType: tdoc.docType, parentId: tdoc.docId }), - page, - system.get('pagination.discussion'), - ); - const uids = ddocs.map((ddoc) => ddoc.owner); - uids.push(tdoc.owner); - const udict = await user.getList(domainId, uids); - this.response.template = 'homework_detail.html'; - this.response.body = { - tdoc, tsdoc, udict, pdict, psdict, rdict, ddocs, page, dpcount, dcount, - }; + this.response.body.pdict = pdict; + this.response.body.psdict = psdict; + this.response.body.rdict = rdict; } @param('tid', Types.ObjectID)