import type { Database } from '@db/database.ts'; export async function setSettings(db: Database, settings: { [k in K]: SettingKeyValueType }) { const dbSettings = Object.entries(settings).map(([name, value]) => ({ name, value: JSON.stringify(value) })); await db.setSettings({ settings: dbSettings }); } export async function getSetting(db: Database, key: K): Promise | null>; export async function getSetting>( db: Database, key: K, defaultValue: D ): Promise>; export async function getSetting>( db: Database, key: K, defaultValue?: D ) { const setting = await db.getSetting({ name: key }); return setting != null ? JSON.parse(setting) : defaultValue != undefined ? defaultValue : null; } export async function getSettings( db: Database ): Promise<{ [k in K]: SettingKeyValueType | null }>; export async function getSettings( db: Database, keys: K ): Promise<{ [k in K[number]]: SettingKeyValueType | null }>; export async function getSettings(db: Database, keys?: K) { const settings = await db.getSettings({ names: keys }); return settings.reduce( (prev, curr) => Object.assign(prev, { [curr.name]: curr.value != null ? JSON.parse(curr.value) : null }), {} as { [k in K[number]]: SettingKeyValueType | null } ); } export enum SettingKey { SignupEnabled = 'signup.enabled', SignupDisabledMessage = 'signup.disabledMessage', SignupDisabledSubMessage = 'signup.disabledSubMessage' } export type SettingKeyValueType = { [SettingKey.SignupEnabled]: boolean; [SettingKey.SignupDisabledMessage]: string; [SettingKey.SignupDisabledSubMessage]: string; }[K];