Merge reminder & backend features

This commit is contained in:
2025-01-17 15:37:14 +01:00
parent 67db439f84
commit f3b68dca33
5 changed files with 73 additions and 38 deletions

View File

@@ -1,9 +1,28 @@
import { BackendConfig } from "../types/config";
import { BackendSettings, Config } from "../types/config";
import { Notification } from "../types/notification";
export abstract class Backend {
constructor(config: BackendConfig) {
export abstract class Backend<C extends BackendSettings> {
public abstract readonly name: string;
protected abstract requiredFields: readonly (keyof C)[];
protected abstract notify(config: C, notification: Notification): void;
#validate(config: Partial<C>): C {
for (const field of this.requiredFields) {
if (config[field] === undefined) {
throw new Error(`The '${String(field)}' configuration field of'${this.name}' consumer is required`)
}
}
return config as C;
}
abstract notify(notification: Notification): void;
public remind(config: Config, notification: Notification) {
const cfg = config.backend[this.name] as Partial<C>;
if (cfg.enable !== true) {
return
}
this.notify(this.#validate(cfg), notification);
}
}