From e78524d1c9b31525b4425cb6cf5ac0ef7bd8eb8a Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Tue, 12 May 2026 10:39:05 -0700 Subject: [PATCH] udpate service to use monitorIds instead of monitorId --- .../business/maintenanceWindowService.ts | 58 ++++++++++++++----- 1 file changed, 42 insertions(+), 16 deletions(-) diff --git a/server/src/service/business/maintenanceWindowService.ts b/server/src/service/business/maintenanceWindowService.ts index 50278d215..e56ad3757 100644 --- a/server/src/service/business/maintenanceWindowService.ts +++ b/server/src/service/business/maintenanceWindowService.ts @@ -27,7 +27,11 @@ export interface IMaintenanceWindowService { }): Promise<{ maintenanceWindows: MaintenanceWindow[]; maintenanceWindowCount: number }>; getMaintenanceWindowsByMonitorId(params: { monitorId: string; teamId: string }): Promise; deleteMaintenanceWindow(params: { id: string; teamId: string }): Promise; - editMaintenanceWindow(params: { id: string; teamId: string; body: Partial }): Promise; + editMaintenanceWindow(params: { + id: string; + teamId: string; + body: Partial> & { monitors?: string[] }; + }): Promise; } export class MaintenanceWindowService implements IMaintenanceWindowService { @@ -84,20 +88,17 @@ export class MaintenanceWindowService implements IMaintenanceWindowService { }); } - const dbTransactions = monitorIDs.map((monitorId: string) => { - return this.maintenanceWindowsRepository.create({ - teamId, - monitorId, - name: name, - active: active, - duration: duration, - durationUnit: durationUnit, - repeat: repeat, - start: start, - end: end, - }); + await this.maintenanceWindowsRepository.create({ + teamId, + monitorIds: monitorIDs, + name: name, + active: active, + duration: duration, + durationUnit: durationUnit, + repeat: repeat, + start: start, + end: end, }); - await Promise.all(dbTransactions); }; getMaintenanceWindowById = async ({ id, teamId }: { id: string; teamId: string }) => { @@ -135,7 +136,32 @@ export class MaintenanceWindowService implements IMaintenanceWindowService { return await this.maintenanceWindowsRepository.deleteById(id, teamId); }; - editMaintenanceWindow = async ({ id, teamId, body }: { id: string; teamId: string; body: Partial }) => { - return await this.maintenanceWindowsRepository.updateById(id, teamId, body); + editMaintenanceWindow = async ({ + id, + teamId, + body, + }: { + id: string; + teamId: string; + body: Partial> & { monitors?: string[] }; + }) => { + const { monitors, ...rest } = body; + const update: Partial = rest; + + if (monitors !== undefined) { + const monitorDocs = await this.monitorsRepository.findByIds(monitors); + const unauthorizedMonitors = monitorDocs.filter((monitor) => monitor.teamId !== teamId); + if (unauthorizedMonitors.length > 0) { + throw new AppError({ + message: "Unauthorized to edit maintenance window for one or more monitors", + service: SERVICE_NAME, + method: "editMaintenanceWindow", + status: 403, + }); + } + update.monitorIds = monitors; + } + + return await this.maintenanceWindowsRepository.updateById(id, teamId, update); }; }