diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 5efc0ef6d..eb01a9ce8 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.15.29", + "version": "2.15.30", "bin": "bin/hydrooj.js", "main": "dist/loader.js", "typings": "dist/loader.d.ts", diff --git a/packages/hydrooj/src/handler/record.ts b/packages/hydrooj/src/handler/record.ts index d458f189f..7051a34b6 100644 --- a/packages/hydrooj/src/handler/record.ts +++ b/packages/hydrooj/src/handler/record.ts @@ -82,14 +82,14 @@ class RecordDetailHandler extends RecordHandler { problem.get(domainId, rdoc.pid), user.getById(domainId, rdoc.uid), ]); + if (!(pdoc && this.user.hasPerm(PERM.PERM_VIEW_PROBLEM))) { + pdoc = problem.Pdoc.create(pdoc?.docId || 0, pdoc?.pid || '*'); + } if (!rdoc.contest && pdoc.hidden && pdoc.owner !== this.user._id) { if (!this.user.hasPerm(PERM.PERM_VIEW_PROBLEM_HIDDEN)) { pdoc = problem.Pdoc.create(pdoc.docId, pdoc.pid); } } - if (!this.user.hasPerm(PERM.PERM_VIEW_PROBLEM)) { - pdoc = problem.Pdoc.create(pdoc.docId, pdoc.pid); - } this.response.body = { path: [ ['Hydro', 'homepage'], diff --git a/packages/hydrooj/src/script/problemStat.ts b/packages/hydrooj/src/script/problemStat.ts index 6bd007140..dd909a268 100644 --- a/packages/hydrooj/src/script/problemStat.ts +++ b/packages/hydrooj/src/script/problemStat.ts @@ -30,18 +30,22 @@ export async function run() { ]; const bulk = db.collection('document').initializeUnorderedBulkOp(); db.collection('record').aggregate(pipeline).each( - (err, adoc: any) => bulk.find({ - domainId: adoc._id.domainId, - docType: document.TYPE_PROBLEM, - docId: adoc._id.pid, - }).updateOne({ - $set: { - nSubmit: adoc.nSubmit, - nAccept: adoc.nAccept, - }, - }), + (err, adoc: any) => { + if (adoc) { + bulk.find({ + domainId: adoc._id.domainId, + docType: document.TYPE_PROBLEM, + docId: adoc._id.pid, + }).updateOne({ + $set: { + nSubmit: adoc.nSubmit, + nAccept: adoc.nAccept, + }, + }); + } + }, ); - await bulk.execute(); + if (bulk.length) await bulk.execute(); } export const validate = {}; diff --git a/packages/hydrooj/src/script/rating.ts b/packages/hydrooj/src/script/rating.ts index 503ee5d83..f4b528a57 100644 --- a/packages/hydrooj/src/script/rating.ts +++ b/packages/hydrooj/src/script/rating.ts @@ -128,7 +128,8 @@ async function runInDomain(domainId: string, isSub: boolean, report: Function) { for (const dudoc of dudocs) { deltaudict[dudoc.uid] = dudoc.rpdelta || 0; } - const contests = await contest.getMulti(domainId, { rated: true }).sort('endAt', -1).toArray(); + const contests = await contest.getMulti(domainId, { rated: true }) + .sort('endAt', -1).toArray(); await report({ message: `Found ${contests.length} contests in ${domainId}` }); for (const i in contests) { const tdoc = contests[i];