core: contest: fix scoreboard lock

pull/476/head
undefined 2 years ago
parent 510da25c88
commit cf99d58220

@ -692,9 +692,19 @@ export async function recalcStatus(domainId: string, tid: ObjectID) {
export async function unlockScoreboard(domainId: string, tid: ObjectID) {
const tdoc = await document.get(domainId, document.TYPE_CONTEST, tid);
if (!tdoc.lockAt || tdoc.unlocked) return;
const rdocs = await RecordModel.getMulti(domainId, { tid, _id: { $gte: Time.getObjectID(tdoc.lockAt) } })
const rdocs = await RecordModel.getMulti(domainId, { contest: tid, _id: { $gte: Time.getObjectID(tdoc.lockAt) } })
.project(buildProjection(['_id', 'uid', 'pid', 'status', 'score'])).toArray();
await Promise.all(rdocs.map((rdoc) => _updateStatus(tdoc, rdoc.uid, rdoc._id, rdoc.pid, rdoc.status, rdoc.score)));
for (const rdoc of rdocs) {
// TODO optimize
// eslint-disable-next-line
const tsdoc = await document.revPushStatus(domainId, document.TYPE_CONTEST, tid, rdoc.uid, 'journal', {
rid: rdoc._id, pid: rdoc.pid, status: rdoc.status, score: rdoc.score,
}, 'rid');
const journal = _getStatusJournal(tsdoc);
const stats = RULES[tdoc.rule].stat(tdoc, journal);
// eslint-disable-next-line
await document.revSetStatus(domainId, document.TYPE_CONTEST, tid, rdoc.uid, tsdoc.rev, { journal, ...stats });
}
await edit(domainId, tid, { unlocked: true });
}

Loading…
Cancel
Save