From 1a1cff6e8e2586f4a127fd5a31ed061f16964f1b Mon Sep 17 00:00:00 2001 From: undefined Date: Wed, 11 Jun 2025 11:44:50 +0800 Subject: [PATCH] core: problem/before-edit: add unset param --- packages/hydrooj/src/model/document.ts | 6 +++--- packages/hydrooj/src/model/problem.ts | 5 +++-- packages/hydrooj/src/service/bus.ts | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/hydrooj/src/model/document.ts b/packages/hydrooj/src/model/document.ts index d076b0a26..12b5f8329 100644 --- a/packages/hydrooj/src/model/document.ts +++ b/packages/hydrooj/src/model/document.ts @@ -104,9 +104,9 @@ export async function set( ): Promise { await bus.parallel('document/set', domainId, docType, docId, $set, $unset); const update: UpdateFilter = {}; - if ($set) update.$set = $set; - if ($unset) update.$unset = $unset; - if ($push) update.$push = $push; + if ($set && Object.keys($set).length) update.$set = $set; + if ($unset && Object.keys($unset).length) update.$unset = $unset; + if ($push && Object.keys($push).length) update.$push = $push; return await coll.findOneAndUpdate( { domainId, docType, docId }, update, diff --git a/packages/hydrooj/src/model/problem.ts b/packages/hydrooj/src/model/problem.ts index ce91df227..8f73353b2 100644 --- a/packages/hydrooj/src/model/problem.ts +++ b/packages/hydrooj/src/model/problem.ts @@ -231,14 +231,15 @@ export class ProblemModel { static async edit(domainId: string, _id: number, $set: Partial): Promise { const delpid = $set.pid === ''; const ddoc = await DomainModel.get(domainId); + const $unset = delpid ? { pid: '' } : {}; if (delpid) { delete $set.pid; $set.sort = sortable(`P${_id}`, ddoc.namespaces); } else if ($set.pid) { $set.sort = sortable($set.pid, ddoc.namespaces); } - await bus.parallel('problem/before-edit', $set); - const result = await document.set(domainId, document.TYPE_PROBLEM, _id, $set, delpid ? { pid: '' } : undefined); + await bus.parallel('problem/before-edit', $set, $unset); + const result = await document.set(domainId, document.TYPE_PROBLEM, _id, $set, $unset); await bus.emit('problem/edit', result); return result; } diff --git a/packages/hydrooj/src/service/bus.ts b/packages/hydrooj/src/service/bus.ts index bee4aff45..5e3f21647 100644 --- a/packages/hydrooj/src/service/bus.ts +++ b/packages/hydrooj/src/service/bus.ts @@ -62,7 +62,7 @@ export interface EventMap { 'problem/before-add': (domainId: string, content: string, owner: number, docId: number, doc: Partial) => VoidReturn 'problem/add': (doc: Partial, docId: number) => VoidReturn - 'problem/before-edit': (doc: Partial) => VoidReturn + 'problem/before-edit': (doc: Partial, $unset: OnlyFieldsOfType) => VoidReturn 'problem/edit': (doc: ProblemDoc) => VoidReturn 'problem/before-del': (domainId: string, docId: number) => VoidReturn 'problem/del': (domainId: string, docId: number) => VoidReturn