import { eq } from "drizzle-orm"; import { createHousekeepingPreferencesRepository, type HousekeepingPreferencesStorage, } from "@/features/housekeeping/foundation/preferences/repository"; import { type Db, db, HousekeepingUserPreferences } from "@/lib/db"; type HousekeepingPreferencesDb = Pick; export function createDrizzleHousekeepingPreferencesStorage( database: HousekeepingPreferencesDb, ): HousekeepingPreferencesStorage { return { async findByUserId(userId) { const rows = await database .select({ schemaVersion: HousekeepingUserPreferences.schemaVersion, payload: HousekeepingUserPreferences.payload, }) .from(HousekeepingUserPreferences) .where(eq(HousekeepingUserPreferences.userId, userId)) .limit(1); return rows[0] ?? null; }, async upsert(row) { await database .insert(HousekeepingUserPreferences) .values(row) .onDuplicateKeyUpdate({ set: { schemaVersion: row.schemaVersion, payload: row.payload, updatedAt: new Date(), }, }); }, }; } export const housekeepingPreferencesRepository = createHousekeepingPreferencesRepository( createDrizzleHousekeepingPreferencesStorage(db), );