From b3555e030f7ee51205f1ccdabf23f16290a23553 Mon Sep 17 00:00:00 2001 From: undefined Date: Sat, 16 Jul 2022 18:01:10 +0800 Subject: [PATCH] core: contest.list: ignore hidden rule --- packages/hydrooj/src/handler/contest.ts | 9 ++++++--- packages/hydrooj/src/handler/home.ts | 3 ++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/hydrooj/src/handler/contest.ts b/packages/hydrooj/src/handler/contest.ts index 3ee87c419..8c4486610 100644 --- a/packages/hydrooj/src/handler/contest.ts +++ b/packages/hydrooj/src/handler/contest.ts @@ -5,8 +5,9 @@ import moment from 'moment-timezone'; import { ObjectID } from 'mongodb'; import { sortFiles, Time } from '@hydrooj/utils/lib/utils'; import { - ContestNotFoundError, ContestNotLiveError, ForbiddenError, InvalidTokenError, - PermissionError, ValidationError, + BadRequestError, ContestNotFoundError, ContestNotLiveError, + ForbiddenError, InvalidTokenError, PermissionError, + ValidationError, } from '../error'; import { Tdoc } from '../interface'; import paginate from '../lib/paginate'; @@ -69,7 +70,9 @@ export class ContestListHandler extends Handler { @param('rule', Types.Range(contest.RULES), true) @param('page', Types.PositiveInt, true) async get(domainId: string, rule = '', page = 1) { - const cursor = contest.getMulti(domainId, rule ? { rule } : { rule: { $ne: 'homework' } }); + if (rule && contest.RULES[rule].hidden) throw new BadRequestError(); + const rules = Object.keys(contest.RULES).filter((i) => !contest.RULES[i].hidden); + const cursor = contest.getMulti(domainId, rule ? { rule } : { rule: { $in: rules } }); const qs = rule ? `rule=${rule}` : ''; const [tdocs, tpcount] = await paginate(cursor, page, system.get('pagination.contest')); const tids = []; diff --git a/packages/hydrooj/src/handler/home.ts b/packages/hydrooj/src/handler/home.ts index 338907b74..1989e9e0f 100644 --- a/packages/hydrooj/src/handler/home.ts +++ b/packages/hydrooj/src/handler/home.ts @@ -51,7 +51,8 @@ export class HomeHandler extends Handler { async getContest(domainId: string, limit = 10) { if (this.user.hasPerm(PERM.PERM_VIEW_CONTEST)) { - const tdocs = await contest.getMulti(domainId, { rule: { $ne: 'homework' } }) + const rules = Object.keys(contest.RULES).filter((i) => !contest.RULES[i].hidden); + const tdocs = await contest.getMulti(domainId, { rule: { $in: rules } }) .limit(limit).toArray(); const tsdict = await contest.getListStatus( domainId, this.user._id, tdocs.map((tdoc) => tdoc.docId),