feat(housekeeping): persist operator preferences

This commit is contained in:
Simo committed 2026-08-26 22:17:52 +02:00
1 parent 86a2d9d069
commit 2eb0456999
8 files changed
+566

No files matched your search

@@ -0,0 +1,49 @@
import type { HousekeepingPreferences } from "./schema";
import {
defaultHousekeepingPreferences,
parseHousekeepingPreferences,
} from "./schema";
export interface HousekeepingPreferencesStorageRow {
schemaVersion: number;
payload: string;
}
export interface HousekeepingPreferencesStorage {
findByUserId(
userId: number,
): Promise<HousekeepingPreferencesStorageRow | null>;
upsert(row: {
userId: number;
schemaVersion: 1;
payload: string;
}): Promise<void>;
}
export interface HousekeepingPreferencesRepository {
read(userId: number): Promise<HousekeepingPreferences>;
upsert(userId: number, value: HousekeepingPreferences): Promise<void>;
}
export function createHousekeepingPreferencesRepository(
storage: HousekeepingPreferencesStorage,
): HousekeepingPreferencesRepository {
return {
async read(userId) {
const row = await storage.findByUserId(userId);
if (!row) return defaultHousekeepingPreferences();
if (row.schemaVersion !== 1) {
throw new Error("unsupported housekeeping preferences schema version");
}
return parseHousekeepingPreferences(row.payload);
},
async upsert(userId, value) {
await storage.upsert({
userId,
schemaVersion: value.schemaVersion,
payload: JSON.stringify(value),
});
},
};
}