From df0982c6905cf9c43d2aedc937519f212233a14b Mon Sep 17 00:00:00 2001 From: undefined Date: Mon, 25 Jan 2021 23:01:40 +0800 Subject: [PATCH] =?UTF-8?q?core:=20homework:=20=E4=BF=AE=E6=AD=A3=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E9=80=BB=E8=BE=91=20&=20record:=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/hydrooj/package.json | 2 +- packages/hydrooj/src/handler/homework.ts | 11 +++++++---- packages/hydrooj/src/handler/record.ts | 10 ++++++++-- packages/hydrooj/src/model/record.ts | 6 ++++-- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index f57ec418f..3e8efd0e9 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.17.2", + "version": "2.17.3", "bin": "bin/hydrooj.js", "main": "dist/loader.js", "typings": "dist/loader.d.ts", diff --git a/packages/hydrooj/src/handler/homework.ts b/packages/hydrooj/src/handler/homework.ts index 02d2f8151..3c69df94d 100644 --- a/packages/hydrooj/src/handler/homework.ts +++ b/packages/hydrooj/src/handler/homework.ts @@ -356,7 +356,7 @@ class HomeworkScoreboardHandler extends HomeworkHandler { ]; this.response.template = 'contest_scoreboard.html'; this.response.body = { - tdoc, rows, path, udict, + tdoc, rows, path, udict, page_name: 'homework_scoreboard', }; } } @@ -370,8 +370,8 @@ class HomeworkScoreboardDownloadHandler extends HomeworkHandler { html: (rows) => this.renderHTML('contest_scoreboard_download_html.html', { rows }), }; if (!getContent[ext]) throw new ValidationError('ext'); - const [, rows] = await this.getScoreboard(domainId, tid, true, document.TYPE_HOMEWORK); - this.binary(await getContent[ext](rows), `${this.tdoc.title}.${ext}`); + const [tdoc, rows] = await this.getScoreboard(domainId, tid, true, document.TYPE_HOMEWORK); + this.binary(await getContent[ext](rows), `${tdoc.title}.${ext}`); } } @@ -407,7 +407,10 @@ export async function apply() { Route('homework_create', '/homework/create', HomeworkCreateHandler, PERM.PERM_CREATE_HOMEWORK); Route('homework_detail', '/homework/:tid', HomeworkDetailHandler, PERM.PERM_VIEW_HOMEWORK); Route('homework_scoreboard', '/homework/:tid/scoreboard', HomeworkScoreboardHandler, PERM.PERM_VIEW_HOMEWORK_SCOREBOARD); - Route('homework_scoreboard', '/homework/:tid/scoreboard/download/:ext', HomeworkScoreboardDownloadHandler, PERM.PERM_VIEW_HOMEWORK_SCOREBOARD); + Route( + 'homework_scoreboard_download', '/homework/:tid/scoreboard/download/:ext', + HomeworkScoreboardDownloadHandler, PERM.PERM_VIEW_HOMEWORK_SCOREBOARD, + ); Route('homework_detail_problem', '/homework/:tid/p/:pid', HomeworkDetailProblemHandler, PERM.PERM_VIEW_HOMEWORK); Route('homework_detail_problem_submit', '/homework/:tid/p/:pid/submit', HomeworkDetailProblemSubmitHandler, PERM.PERM_SUBMIT_PROBLEM); Route('homework_code', '/homework/:tid/code', HomeworkCodeHandler, PERM.PERM_VIEW_HOMEWORK); diff --git a/packages/hydrooj/src/handler/record.ts b/packages/hydrooj/src/handler/record.ts index 7051a34b6..8453961d5 100644 --- a/packages/hydrooj/src/handler/record.ts +++ b/packages/hydrooj/src/handler/record.ts @@ -1,6 +1,8 @@ import { FilterQuery, ObjectID } from 'mongodb'; import { PermissionError, RecordNotFoundError } from '../error'; -import { PERM, CONSTANT, STATUS } from '../model/builtin'; +import { + PERM, CONSTANT, STATUS, PRIV, +} from '../model/builtin'; import * as problem from '../model/problem'; import * as record from '../model/record'; import * as contest from '../model/contest'; @@ -19,7 +21,8 @@ class RecordListHandler extends RecordHandler { @param('pid', Types.String, true) @param('tid', Types.ObjectID, true) @param('uidOrName', Types.String, true) - async get(domainId: string, page = 1, pid?: string, tid?: ObjectID, uidOrName?: string) { + @param('allDomain', Types.Boolean, true) + async get(domainId: string, page = 1, pid?: string, tid?: ObjectID, uidOrName?: string, all = false) { this.response.template = 'record_main.html'; const q: FilterQuery = { 'contest.tid': tid, hidden: false }; if (uidOrName) { @@ -63,6 +66,9 @@ class RecordListHandler extends RecordHandler { filterTid: tid, filterUidOrName: uidOrName, }; + if (this.user.hasPriv(PRIV.PRIV_VIEW_JUDGE_STATISTICS)) { + this.response.body.statistics = await record.stat(all ? undefined : domainId); + } } } diff --git a/packages/hydrooj/src/model/record.ts b/packages/hydrooj/src/model/record.ts index 5c93298da..9094c594e 100644 --- a/packages/hydrooj/src/model/record.ts +++ b/packages/hydrooj/src/model/record.ts @@ -58,15 +58,17 @@ export async function get(domainId: string, _id: ObjectID): Promise } export async function stat(domainId?: string) { - const [d5min, d1h, d1d, d1m, total] = await Promise.all([ + const [d5min, d1h, day, week, month, year, total] = await Promise.all([ coll.find({ _id: { $gte: Time.getObjectID(moment().add(-5, 'minutes')) }, ...domainId ? { domainId } : {} }).count(), coll.find({ _id: { $gte: Time.getObjectID(moment().add(-1, 'hour')) }, ...domainId ? { domainId } : {} }).count(), coll.find({ _id: { $gte: Time.getObjectID(moment().add(-1, 'day')) }, ...domainId ? { domainId } : {} }).count(), + coll.find({ _id: { $gte: Time.getObjectID(moment().add(-1, 'week')) }, ...domainId ? { domainId } : {} }).count(), coll.find({ _id: { $gte: Time.getObjectID(moment().add(-1, 'month')) }, ...domainId ? { domainId } : {} }).count(), + coll.find({ _id: { $gte: Time.getObjectID(moment().add(-1, 'year')) }, ...domainId ? { domainId } : {} }).count(), coll.find(domainId ? { domainId } : {}).count(), ]); return { - d5min, d1h, d1d, d1m, total, + d5min, d1h, day, week, month, year, total, }; }