From 9ea781f80071e26be011c410a299fca25e8c9879 Mon Sep 17 00:00:00 2001 From: undefined Date: Thu, 10 Feb 2022 20:44:30 +0800 Subject: [PATCH] core: handle problem projection --- packages/hydrooj/package.json | 2 +- packages/hydrooj/src/handler/contest.ts | 2 +- packages/hydrooj/src/handler/homework.ts | 2 +- packages/hydrooj/src/handler/problem.ts | 1 + packages/hydrooj/src/model/problem.ts | 17 ++++++++++++++--- 5 files changed, 18 insertions(+), 6 deletions(-) diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 16debde2f..db49d51ee 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "3.4.18", + "version": "3.4.19", "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 e2b1181c8..50c2a7d2a 100644 --- a/packages/hydrooj/src/handler/contest.ts +++ b/packages/hydrooj/src/handler/contest.ts @@ -104,7 +104,7 @@ export class ContestDetailHandler extends Handler { tdoc, tsdoc, udict, page, }; if (contest.isNotStarted(tdoc)) return; - const pdict = await problem.getList(domainId, tdoc.pids, true); + const pdict = await problem.getList(domainId, tdoc.pids, true, undefined, undefined, problem.PROJECTION_CONTEST_LIST); const psdict = {}; let rdict = {}; if (tsdoc) { diff --git a/packages/hydrooj/src/handler/homework.ts b/packages/hydrooj/src/handler/homework.ts index a6f951d60..63004729e 100644 --- a/packages/hydrooj/src/handler/homework.ts +++ b/packages/hydrooj/src/handler/homework.ts @@ -74,7 +74,7 @@ class HomeworkDetailHandler extends Handler { tdoc, tsdoc, udict, ddocs, page, dpcount, dcount, }; if (contest.isNotStarted(tdoc)) return; - const pdict = await problem.getList(domainId, tdoc.pids, true); + const pdict = await problem.getList(domainId, tdoc.pids, true, undefined, undefined, problem.PROJECTION_CONTEST_LIST); const psdict = {}; let rdict = {}; if (tsdoc) { diff --git a/packages/hydrooj/src/handler/problem.ts b/packages/hydrooj/src/handler/problem.ts index ef713604e..bd83840ec 100644 --- a/packages/hydrooj/src/handler/problem.ts +++ b/packages/hydrooj/src/handler/problem.ts @@ -297,6 +297,7 @@ export class ProblemDetailHandler extends ProblemHandler { if (!contest.canShowScoreboard(this.tdoc) || !contest.isLocked(this.tdoc)) { delete this.pdoc.nAccept; delete this.pdoc.nSubmit; + delete this.pdoc.difficulty; delete this.pdoc.stats; } } else if (!problem.canViewBy(this.pdoc, this.user)) { diff --git a/packages/hydrooj/src/model/problem.ts b/packages/hydrooj/src/model/problem.ts index 80ffc8d8c..df746aa84 100644 --- a/packages/hydrooj/src/model/problem.ts +++ b/packages/hydrooj/src/model/problem.ts @@ -28,10 +28,21 @@ function sortable(source: string) { } export class ProblemModel { - static PROJECTION_LIST: Field[] = [ + static PROJECTION_CONTEST_LIST: Field[] = [ '_id', 'domainId', 'docType', 'docId', 'pid', - 'owner', 'title', 'nSubmit', 'nAccept', 'difficulty', - 'tag', 'hidden', 'assign', 'stats', + 'owner', 'title', 'assign', + ]; + + static PROJECTION_LIST: Field[] = [ + ...ProblemModel.PROJECTION_CONTEST_LIST, + 'nSubmit', 'nAccept', 'difficulty', 'tag', 'hidden', + 'stats', + ]; + + static PROJECTION_CONTEST_DETAIL: Field[] = [ + ...ProblemModel.PROJECTION_CONTEST_LIST, + 'content', 'html', 'data', 'config', 'additional_file', + 'reference', ]; static PROJECTION_PUBLIC: Field[] = [