diff --git a/libs/common/src/platform/abstractions/task-scheduler.service.ts b/libs/common/src/platform/abstractions/task-scheduler.service.ts index fc6d901f28..de3bead0e0 100644 --- a/libs/common/src/platform/abstractions/task-scheduler.service.ts +++ b/libs/common/src/platform/abstractions/task-scheduler.service.ts @@ -10,29 +10,22 @@ export type TaskIdentifier = { }; export abstract class TaskSchedulerService { - protected taskHandlers: Map void>; - constructor( protected logService: LogService, protected stateProvider: StateProvider, ) {} - - abstract registerTaskHandler(taskName: ScheduledTaskName, handler: () => void): void; - - abstract unregisterTaskHandler(taskName: ScheduledTaskName): void; - + protected taskHandlers: Map void>; abstract setTimeout( taskName: ScheduledTaskName, delayInMs: number, ): Promise; - abstract setInterval( taskName: ScheduledTaskName, intervalInMs: number, initialDelayInMs?: number, ): Promise; - abstract clearScheduledTask(taskIdentifier: TaskIdentifier): Promise; - + abstract registerTaskHandler(taskName: ScheduledTaskName, handler: () => void): void; + abstract unregisterTaskHandler(taskName: ScheduledTaskName): void; protected abstract triggerTask(taskName: ScheduledTaskName, periodInMinutes?: number): void; } diff --git a/libs/common/src/platform/services/default-task-scheduler.service.ts b/libs/common/src/platform/services/default-task-scheduler.service.ts index a77b75ee98..12c45489f2 100644 --- a/libs/common/src/platform/services/default-task-scheduler.service.ts +++ b/libs/common/src/platform/services/default-task-scheduler.service.ts @@ -10,30 +10,6 @@ export class DefaultTaskSchedulerService extends TaskSchedulerService { this.taskHandlers = new Map(); } - registerTaskHandler(taskName: ScheduledTaskName, handler: () => void) { - const existingHandler = this.taskHandlers.get(taskName); - if (existingHandler) { - this.logService.warning(`Task handler for ${taskName} already exists. Overwriting.`); - this.unregisterTaskHandler(taskName); - } - - this.taskHandlers.set(taskName, handler); - } - - unregisterTaskHandler(taskName: ScheduledTaskName) { - this.taskHandlers.delete(taskName); - } - - protected async triggerTask( - taskName: ScheduledTaskName, - _periodInMinutes?: number, - ): Promise { - const handler = this.taskHandlers.get(taskName); - if (handler) { - handler(); - } - } - /** * Sets a timeout and returns the timeout id. * @@ -44,6 +20,8 @@ export class DefaultTaskSchedulerService extends TaskSchedulerService { taskName: ScheduledTaskName, delayInMs: number, ): Promise { + this.validateRegisteredTask(taskName); + return globalThis.setTimeout(() => this.triggerTask(taskName), delayInMs); } @@ -59,6 +37,8 @@ export class DefaultTaskSchedulerService extends TaskSchedulerService { intervalInMs: number, _initialDelayInMs?: number, ): Promise { + this.validateRegisteredTask(taskName); + return globalThis.setInterval(() => this.triggerTask(taskName), intervalInMs); } @@ -76,4 +56,56 @@ export class DefaultTaskSchedulerService extends TaskSchedulerService { globalThis.clearInterval(taskIdentifier.intervalId); } } + + /** + * Registers a task handler. + * + * @param taskName - The name of the task. + * @param handler - The task handler. + */ + registerTaskHandler(taskName: ScheduledTaskName, handler: () => void) { + const existingHandler = this.taskHandlers.get(taskName); + if (existingHandler) { + this.logService.warning(`Task handler for ${taskName} already exists. Overwriting.`); + this.unregisterTaskHandler(taskName); + } + + this.taskHandlers.set(taskName, handler); + } + + /** + * Unregisters a task handler. + * + * @param taskName - The name of the task. + */ + unregisterTaskHandler(taskName: ScheduledTaskName) { + this.taskHandlers.delete(taskName); + } + + /** + * Triggers a task. + * + * @param taskName - The name of the task. + * @param _periodInMinutes - The period in minutes. Unused in the base implementation. + */ + protected async triggerTask( + taskName: ScheduledTaskName, + _periodInMinutes?: number, + ): Promise { + const handler = this.taskHandlers.get(taskName); + if (handler) { + handler(); + } + } + + /** + * Validates that a task handler is registered. + * + * @param taskName - The name of the task. + */ + protected validateRegisteredTask(taskName: ScheduledTaskName): void { + if (!this.taskHandlers.has(taskName)) { + throw new Error(`Task handler for ${taskName} not registered. Unable to schedule task.`); + } + } }