mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-17 09:36:08 +08:00
core: contest: fix scoreboard lock
This commit is contained in:
1 parent
510da25c88
commit
cf99d58220
1 file changed
+12
-2
@@ -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 });
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user