core: 保留比赛题目顺序

This commit is contained in:
undefined committed 2021-05-18 22:04:01 +08:00
1 parent 41219ef147
commit 6dfeede6d6
5 files changed
+25 -26

No files matched your search

+2 -10
View File
@@ -569,22 +569,15 @@ export async function getScoreboard(
const tdoc = await get(domainId, tid, docType);
if (!canShowScoreboard.call(this, tdoc)) throw new ContestScoreboardHiddenError(tid);
if (!canShowRecord.call(this, tdoc)) throw new ContestScoreboardHiddenError(tid);
const tsdocs = await getMultiStatus(domainId, { docId: tid }, docType).sort(RULES[tdoc.rule].statusSort);
const tsdocsCursor = getMultiStatus(domainId, { docId: tid }, docType).sort(RULES[tdoc.rule].statusSort);
const pdict = await problem.getList(domainId, tdoc.pids, true);
const [rows, udict, nPages] = await RULES[tdoc.rule].scoreboard(
isExport, this.translate.bind(this),
tdoc, pdict, tsdocs, page,
tdoc, pdict, tsdocsCursor, page,
);
return [tdoc, rows, udict, pdict, nPages];
}
export async function verifyProblems(domainId: string, pids: Array<number | string>) {
const pdict = await problem.getList(domainId, pids, true);
const _pids: Set<number> = new Set();
for (const i in pdict) _pids.add(pdict[i].docId);
return Array.from(_pids);
}
export const statusText = (tdoc: Tdoc) => (
isNew(tdoc)
? 'New'
@@ -621,7 +614,6 @@ global.Hydro.model.contest = {
canShowScoreboard,
canViewHiddenScoreboard,
getScoreboard,
verifyProblems,
isNew,
isUpcoming,
isNotStarted,
+13 -6
View File
@@ -2,6 +2,7 @@ import { escapeRegExp } from 'lodash';
import { ItemBucketMetadata } from 'minio';
import moment from 'moment';
import type { Readable } from 'stream';
import TaskModel from './task';
import storage from '../service/storage';
import * as bus from '../service/bus';
import db from '../service/db';
@@ -76,19 +77,25 @@ export class StorageModel {
}
}
async function clean() {
async function cleanFiles() {
let res = await StorageModel.coll.findOneAndDelete({ autoDelete: { $lte: new Date() } });
while (res.value) {
// eslint-disable-next-line no-await-in-loop
// await storage.del(res.value._id);
await storage.del(res.value._id);
// eslint-disable-next-line no-await-in-loop
res = await StorageModel.coll.findOneAndDelete({ autoDelete: { $lte: new Date() } });
}
setTimeout(clean, 10000);
}
bus.on('app/started', () => {
clean();
return StorageModel.coll.createIndex({ path: 1 }, { unique: true });
TaskModel.Worker.addHandler('storage.prune', cleanFiles);
bus.once('app/started', async () => {
if (!await TaskModel.count({ type: 'schedule', subType: 'storage.prune' })) {
await TaskModel.add({
type: 'schedule',
subType: 'storage.prune',
executeAfter: moment().minute(0).second(0).millisecond(0).toDate(),
interval: [1, 'hour'],
});
}
});
global.Hydro.model.storage = StorageModel;