diff --git a/packages/hydrooj/src/model/contest.ts b/packages/hydrooj/src/model/contest.ts index 7e46f6b5f..c2c5739fc 100644 --- a/packages/hydrooj/src/model/contest.ts +++ b/packages/hydrooj/src/model/contest.ts @@ -824,6 +824,7 @@ export async function edit(domainId: string, tid: ObjectId, $set: Partial) if ($set.rule && !RULES[$set.rule]) throw new ValidationError('rule'); const tdoc = await document.get(domainId, document.TYPE_CONTEST, tid); if (!tdoc) throw new ContestNotFoundError(domainId, tid); + await bus.parallel('contest/before-edit', tdoc, $set); RULES[$set.rule || tdoc.rule].check(Object.assign(tdoc, $set)); const res = await document.set(domainId, document.TYPE_CONTEST, tid, $set); await bus.parallel('contest/edit', res); diff --git a/packages/hydrooj/src/service/bus.ts b/packages/hydrooj/src/service/bus.ts index c412fb4fa..d4b425dd9 100644 --- a/packages/hydrooj/src/service/bus.ts +++ b/packages/hydrooj/src/service/bus.ts @@ -85,6 +85,7 @@ export interface EventMap { 'contest/before-add': (payload: Partial) => VoidReturn; 'contest/add': (payload: Partial, id: ObjectId) => VoidReturn; + 'contest/before-edit': (tdoc: Tdoc, $set: Partial) => VoidReturn; 'contest/edit': (payload: Tdoc) => VoidReturn; 'contest/list': (query: Filter, handler: any) => VoidReturn; 'contest/scoreboard': (tdoc: Tdoc, rows: ScoreboardRow[], udict: BaseUserDict, pdict: ProblemDict) => VoidReturn;