core: homework: 修正导出逻辑 & record: 添加统计信息

This commit is contained in:
undefined committed 2021-01-25 23:01:40 +08:00
1 parent f0c1b49ac1
commit df0982c690
4 files changed
+20 -9

No files matched your search

+1 -1
View File
@@ -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",
+7 -4
View File
@@ -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);
+8 -2
View File
@@ -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<Rdoc> = { '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);
}
}
}
+4 -2
View File
@@ -58,15 +58,17 @@ export async function get(domainId: string, _id: ObjectID): Promise<Rdoc | null>
}
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,
};
}