export interface SettingsDependencies { adminCheck: () => Promise; persist: (value: boolean) => Promise; afterPersist: (value: boolean) => Promise | void; } export async function updateSettingService( value: boolean, dependencies: SettingsDependencies, ) { if (!(await dependencies.adminCheck())) throw "Unauthorized"; await dependencies.persist(value); await dependencies.afterPersist(value); } export async function getSettingsService( defaults: T, dependencies: { adminCheck: () => Promise; read: () => Promise; }, ) { if (!(await dependencies.adminCheck())) throw "Unauthorized"; return (await dependencies.read()) ?? defaults; }