core&ui: pagination for homework

This commit is contained in:
undefined committed 2022-10-28 18:39:10 +08:00
1 parent 7c0301c3e0
commit 5baf8f3207
6 files changed
+28 -24

No files matched your search

+8 -8
View File
@@ -1,6 +1,6 @@
{
"name": "hydrooj",
"version": "4.2.13",
"version": "4.2.14",
"bin": "bin/hydrooj.js",
"main": "src/plugin-api",
"module": "src/plugin-api",
@@ -12,11 +12,11 @@
},
"preferUnplugged": true,
"dependencies": {
"@aws-sdk/client-s3": "^3.194.0",
"@aws-sdk/lib-storage": "^3.194.0",
"@aws-sdk/middleware-endpoint": "^3.193.0",
"@aws-sdk/s3-presigned-post": "^3.194.0",
"@aws-sdk/s3-request-presigner": "^3.194.0",
"@aws-sdk/client-s3": "^3.198.0",
"@aws-sdk/lib-storage": "^3.198.0",
"@aws-sdk/middleware-endpoint": "^3.198.0",
"@aws-sdk/s3-presigned-post": "^3.198.0",
"@aws-sdk/s3-request-presigner": "^3.198.0",
"@graphql-tools/schema": "^8.5.1",
"@hydrooj/utils": "workspace:*",
"adm-zip": "0.5.5",
@@ -53,7 +53,7 @@
"serialize-javascript": "^6.0.0",
"superagent": "^8.0.2",
"thirty-two": "^1.0.2",
"ws": "^8.9.0"
"ws": "^8.10.0"
},
"devDependencies": {
"@types/adm-zip": "^0.4.34",
@@ -69,7 +69,7 @@
"@types/nodemailer": "^6.4.6",
"@types/notp": "^2.0.2",
"@types/saslprep": "^1.0.1",
"@types/semver": "^7.3.12",
"@types/semver": "^7.3.13",
"@types/serialize-javascript": "^5.0.2",
"@types/superagent": "^4.1.15",
"moment": "^2.29.4"
+7 -4
View File
@@ -6,7 +6,7 @@ import {
ContestNotFoundError, ForbiddenError, HomeworkNotLiveError,
ValidationError,
} from '../error';
import { PenaltyRules } from '../interface';
import { PenaltyRules, Tdoc } from '../interface';
import paginate from '../lib/paginate';
import { PERM } from '../model/builtin';
import * as contest from '../model/contest';
@@ -22,8 +22,9 @@ const validatePenaltyRules = (input: string) => yaml.load(input);
const convertPenaltyRules = validatePenaltyRules;
class HomeworkMainHandler extends Handler {
async get({ domainId }) {
const tdocs = await contest.getMulti(domainId, { rule: 'homework' }).toArray();
async get({ domainId, page = 1 }) {
const cursor = contest.getMulti(domainId, { rule: 'homework' });
const [tdocs, tpcount] = await paginate<Tdoc>(cursor, page, system.get('pagination.contest'));
const calendar = [];
for (const tdoc of tdocs) {
const cal = { ...tdoc, url: this.url('homework_detail', { tid: tdoc.docId }) };
@@ -33,7 +34,9 @@ class HomeworkMainHandler extends Handler {
} else cal.endAt = tdoc.penaltySince;
calendar.push(cal);
}
this.response.body = { tdocs, calendar };
this.response.body = {
tdocs, calendar, tpcount, page,
};
this.response.template = 'homework_main.html';
}
}