import * as plugins from '../../plugins.ts'; import type { OpsServer } from '../classes.opsserver.ts'; import * as interfaces from '../../../ts_interfaces/index.ts'; import { requireValidIdentity } from '../helpers/guards.ts'; export class SchedulesHandler { public typedrouter = new plugins.typedrequest.TypedRouter(); constructor(private opsServerRef: OpsServer) { this.opsServerRef.typedrouter.addTypedRouter(this.typedrouter); this.registerHandlers(); } private registerHandlers(): void { this.typedrouter.addTypedHandler( new plugins.typedrequest.TypedHandler( 'getBackupSchedules', async (dataArg) => { await requireValidIdentity(this.opsServerRef.adminHandler, dataArg); const schedules = this.opsServerRef.oneboxRef.backupScheduler.getAllSchedules(); return { schedules }; }, ), ); this.typedrouter.addTypedHandler( new plugins.typedrequest.TypedHandler( 'createBackupSchedule', async (dataArg) => { await requireValidIdentity(this.opsServerRef.adminHandler, dataArg); const schedule = await this.opsServerRef.oneboxRef.backupScheduler.createSchedule( dataArg.scheduleConfig, ); return { schedule }; }, ), ); this.typedrouter.addTypedHandler( new plugins.typedrequest.TypedHandler( 'getBackupSchedule', async (dataArg) => { await requireValidIdentity(this.opsServerRef.adminHandler, dataArg); const schedule = this.opsServerRef.oneboxRef.backupScheduler.getScheduleById(dataArg.scheduleId); if (!schedule) { throw new plugins.typedrequest.TypedResponseError('Schedule not found'); } return { schedule }; }, ), ); this.typedrouter.addTypedHandler( new plugins.typedrequest.TypedHandler( 'updateBackupSchedule', async (dataArg) => { await requireValidIdentity(this.opsServerRef.adminHandler, dataArg); const schedule = await this.opsServerRef.oneboxRef.backupScheduler.updateSchedule( dataArg.scheduleId, dataArg.updates, ); return { schedule }; }, ), ); this.typedrouter.addTypedHandler( new plugins.typedrequest.TypedHandler( 'deleteBackupSchedule', async (dataArg) => { await requireValidIdentity(this.opsServerRef.adminHandler, dataArg); await this.opsServerRef.oneboxRef.backupScheduler.deleteSchedule(dataArg.scheduleId); return { ok: true }; }, ), ); this.typedrouter.addTypedHandler( new plugins.typedrequest.TypedHandler( 'triggerBackupSchedule', async (dataArg) => { await requireValidIdentity(this.opsServerRef.adminHandler, dataArg); await this.opsServerRef.oneboxRef.backupScheduler.triggerBackup(dataArg.scheduleId); // triggerBackup is void; the backup is created async by the scheduler // Return the most recent backup for the schedule const allBackups = this.opsServerRef.oneboxRef.backupManager.listBackups(); const latestBackup = allBackups.find((b: any) => b.scheduleId === dataArg.scheduleId); return { backup: latestBackup! }; }, ), ); } }