From 895b91d8ab215356bdd821432b87ddb493382f92 Mon Sep 17 00:00:00 2001 From: undefined Date: Mon, 20 Sep 2021 18:54:56 +0800 Subject: [PATCH] core: fix contest discussion index --- packages/hydrooj/package.json | 2 +- packages/hydrooj/src/model/contest.ts | 31 ++++++++++++------------ packages/hydrooj/src/model/discussion.ts | 2 +- packages/hydrooj/src/upgrade.ts | 16 ++++++++++++ 4 files changed, 33 insertions(+), 18 deletions(-) diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 2768aef7a..e5ab0c9fe 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.36.10", + "version": "2.36.11", "bin": "bin/hydrooj.js", "main": "src/loader", "module": "src/loader", diff --git a/packages/hydrooj/src/model/contest.ts b/packages/hydrooj/src/model/contest.ts index e91e9df69..6b7192f10 100644 --- a/packages/hydrooj/src/model/contest.ts +++ b/packages/hydrooj/src/model/contest.ts @@ -241,24 +241,23 @@ const oi: ContestRule = { const index = pid.toString().includes(':') ? `${tsdoc.uid}/${pid.toString().replace(':', '/')}` : `${tsdoc.uid}/${tdoc.domainId}/${pid}`; - const node: ScoreboardNode = - // eslint-disable-next-line @typescript-eslint/no-use-before-define - isDone(tdoc) && tsddict[pid]?.rid?.toHexString() !== psdict[index]?.rid?.toHexString() - ? { - type: 'records', - value: '', - raw: [{ - value: tsddict[pid]?.score ?? '-', - raw: tsddict[pid]?.rid || null, - }, { - value: psdict[index]?.score ?? '-', - raw: psdict[index]?.rid ?? null, - }], - } : { - type: 'record', + // eslint-disable-next-line @typescript-eslint/no-use-before-define + const node: ScoreboardNode = isDone(tdoc) && tsddict[pid]?.rid?.toHexString() !== psdict[index]?.rid?.toHexString() + ? { + type: 'records', + value: '', + raw: [{ value: tsddict[pid]?.score ?? '-', raw: tsddict[pid]?.rid || null, - }; + }, { + value: psdict[index]?.score ?? '-', + raw: psdict[index]?.rid ?? null, + }], + } : { + type: 'record', + value: tsddict[pid]?.score ?? '-', + raw: tsddict[pid]?.rid || null, + }; if (tsddict[pid]?.status === STATUS.STATUS_ACCEPTED && tsddict[pid]?.rid.generationTime === first[pid]) { node.style = 'background-color: rgb(217, 240, 199);'; } diff --git a/packages/hydrooj/src/model/discussion.ts b/packages/hydrooj/src/model/discussion.ts index f6f3db9f4..47c7efec4 100644 --- a/packages/hydrooj/src/model/discussion.ts +++ b/packages/hydrooj/src/model/discussion.ts @@ -258,7 +258,7 @@ export async function getVnode(domainId: string, type: number, id: string, uid?: const tsdoc = await model.getStatus(domainId, _id, uid); tdoc.attend = tsdoc?.attend || tsdoc?.enroll; } - return { ...tdoc, type, id }; + return { ...tdoc, type, id: _id }; } return { ...await getNode(domainId, id), diff --git a/packages/hydrooj/src/upgrade.ts b/packages/hydrooj/src/upgrade.ts index 613300f43..7d78f8629 100644 --- a/packages/hydrooj/src/upgrade.ts +++ b/packages/hydrooj/src/upgrade.ts @@ -519,6 +519,22 @@ const scripts: UpgradeScript[] = [ await iterateAllUser((udoc) => user.setById(udoc._id, { ip: [udoc.regip] }, { regip: '' })); return true; }, + async function _45_46() { + const _FRESH_INSTALL_IGNORE = 1; + await iterateAllDomain(async (ddoc) => { + const ddocs = await discussion.getMulti(ddoc._id, { + docType: document.TYPE_DISCUSSION, + parentType: { $in: [document.TYPE_CONTEST, document.TYPE_HOMEWORK, document.TYPE_TRAINING] }, + parentId: { $type: 'string' }, + }).toArray(); + for (const doc of ddocs) { + if (ObjectID.isValid(doc.parentId)) { + await document.set(ddoc._id, document.TYPE_DISCUSSION, doc.docId, { parentId: new ObjectID(doc.parentId) }); + } + } + }); + return true; + }, ]; export default scripts;