diff --git a/packages/hydrooj/src/handler/home.ts b/packages/hydrooj/src/handler/home.ts index ba773d86..28f99a6e 100644 --- a/packages/hydrooj/src/handler/home.ts +++ b/packages/hydrooj/src/handler/home.ts @@ -441,7 +441,7 @@ class HomeDomainHandler extends Handler { @param('id', Types.String) async postStar(domainId: string, id: string) { - await user.setById(this.user._id, { pinnedDomains: this.user.pinnedDomains.concat(id) }); + await user.setById(this.user._id, { pinnedDomains: [...this.user.pinnedDomains, id] }); this.back({ star: true }); } @@ -470,7 +470,7 @@ class HomeDomainCreateHandler extends Handler { await Promise.all([ domain.edit(domainId, { avatar }), domain.setUserRole(domainId, this.user._id, 'root'), - user.setById(this.user._id, undefined, undefined, { pinnedDomains: [domainId] }), + user.setById(this.user._id, undefined, undefined, { pinnedDomains: domainId }), ]); this.response.redirect = this.url('domain_dashboard', { domainId }); this.response.body = { domainId }; diff --git a/packages/hydrooj/src/upgrade.ts b/packages/hydrooj/src/upgrade.ts index 59f00f6f..93a48214 100644 --- a/packages/hydrooj/src/upgrade.ts +++ b/packages/hydrooj/src/upgrade.ts @@ -587,6 +587,16 @@ const scripts: UpgradeScript[] = [ await document.coll.updateMany({ docType: document.TYPE_TRAINING, pin: true }, { $set: { pin: 1 } }); return true; }, + async function _81_82() { + return await iterateAllUser((udoc) => { + let pinnedDomains = new Set(); + for (const d of udoc.pinnedDomains) { + if (typeof d === 'string') pinnedDomains.add(d); + else pinnedDomains = Set.union(pinnedDomains, d); + } + return user.setById(udoc._id, { pinnedDomains: Array.from(pinnedDomains) }); + }); + }, ]; export default scripts;