From 336432cc4f79c45f4125e7bb7b127cfb307b8264 Mon Sep 17 00:00:00 2001 From: undefined Date: Fri, 10 Sep 2021 16:50:50 +0800 Subject: [PATCH] =?UTF-8?q?core:=20=E4=BC=98=E5=8C=96record=5Fmain?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E9=80=9F=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/hydrooj/package.json | 2 +- packages/hydrooj/src/handler/record.ts | 6 ++++-- packages/hydrooj/src/model/record.ts | 9 +++++++++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 2b3431e7..22eac656 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.34.0", + "version": "2.34.1", "bin": "bin/hydrooj.js", "main": "src/loader", "module": "src/loader", diff --git a/packages/hydrooj/src/handler/record.ts b/packages/hydrooj/src/handler/record.ts index 4f1ac33c..a34039c5 100644 --- a/packages/hydrooj/src/handler/record.ts +++ b/packages/hydrooj/src/handler/record.ts @@ -14,7 +14,6 @@ import record from '../model/record'; import * as contest from '../model/contest'; import user from '../model/user'; import TaskModel from '../model/task'; -import paginate from '../lib/paginate'; import * as bus from '../service/bus'; import { Route, Handler, Connection, ConnectionHandler, Types, param, @@ -62,7 +61,10 @@ class RecordListHandler extends Handler { } let cursor = record.getMulti(domainId, q).sort('_id', -1); if (!full) cursor = cursor.project(buildProjection(record.PROJECTION_LIST)); - const [rdocs] = invalid ? [[] as RecordDoc[]] : await paginate(cursor, page, full ? 10 : system.get('pagination.record')); + const limit = full ? 10 : system.get('pagination.record'); + const rdocs = invalid + ? [[] as RecordDoc[]] + : await cursor.skip((page - 1) * limit).limit(limit).toArray(); const canViewProblem = this.user.hasPerm(PERM.PERM_VIEW_PROBLEM); const canViewProblemHidden = (!!tid) || this.user.hasPerm(PERM.PERM_VIEW_PROBLEM_HIDDEN); const [udict, pdict] = full ? [{}, {}] diff --git a/packages/hydrooj/src/model/record.ts b/packages/hydrooj/src/model/record.ts index b4c3a194..ad80beb8 100644 --- a/packages/hydrooj/src/model/record.ts +++ b/packages/hydrooj/src/model/record.ts @@ -1,3 +1,4 @@ +/* eslint-disable object-curly-newline */ import { ObjectID, Collection, UpdateQuery, PushOperator, MatchKeysAndValues, OnlyFieldsOfType, @@ -232,5 +233,13 @@ bus.on('domain/delete', (domainId) => Promise.all([ RecordModel.coll.updateMany({ pdomain: domainId }, { $set: { docId: -1 } }), ])); +bus.on('app/started', () => { + RecordModel.coll.createIndexes([ + { key: { 'contest.tid': 1, hidden: 1, _id: -1 }, name: 'basic' }, + { key: { 'contest.tid': 1, hidden: 1, uid: 1, _id: -1 }, name: 'withUser' }, + { key: { 'contest.tid': 1, hidden: 1, pid: 1, _id: -1 }, name: 'withProblem' }, + ]); +}); + export default RecordModel; global.Hydro.model.record = RecordModel;