feat(housekeeping): persist operator preferences
This commit is contained in:
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),
|
||||
});
|
||||
},
|
||||
};
|
||||
}
|
||||
Reference in new issue
Block a user