Files
varo-website/src/util/settings.ts
bytedream 019ef4d444
All checks were successful
deploy / build-and-deploy (/testvaro, /opt/website-test, website-test) (push) Successful in 15s
deploy / build-and-deploy (/varo, /opt/website, website) (push) Successful in 22s
add signup info message
2025-06-16 13:01:08 +02:00

53 lines
2.0 KiB
TypeScript

import type { Database } from '@db/database.ts';
export async function setSettings<K extends SettingKey>(db: Database, settings: { [k in K]: SettingKeyValueType<K> }) {
const dbSettings = Object.entries(settings).map(([name, value]) => ({ name, value: JSON.stringify(value) }));
await db.setSettings({ settings: dbSettings });
}
export async function getSetting<K extends SettingKey>(db: Database, key: K): Promise<SettingKeyValueType<K> | null>;
export async function getSetting<K extends SettingKey, D extends SettingKeyValueType<K>>(
db: Database,
key: K,
defaultValue: D
): Promise<SettingKeyValueType<K>>;
export async function getSetting<K extends SettingKey, D extends SettingKeyValueType<K>>(
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<K extends SettingKey>(
db: Database
): Promise<{ [k in K]: SettingKeyValueType<K> | null }>;
export async function getSettings<K extends SettingKey[]>(
db: Database,
keys: K
): Promise<{ [k in K[number]]: SettingKeyValueType<k> | null }>;
export async function getSettings<K extends SettingKey[]>(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<k> | null }
);
}
export enum SettingKey {
SignupEnabled = 'signup.enabled',
SignupInfoMessage = 'signup.infoMessage',
SignupDisabledMessage = 'signup.disabledMessage',
SignupDisabledSubMessage = 'signup.disabledSubMessage'
}
export type SettingKeyValueType<K extends SettingKey> = {
[SettingKey.SignupEnabled]: boolean;
[SettingKey.SignupInfoMessage]: string;
[SettingKey.SignupDisabledMessage]: string;
[SettingKey.SignupDisabledSubMessage]: string;
}[K];