44 lines
1.2 KiB
TypeScript
44 lines
1.2 KiB
TypeScript
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<Db, "select" | "insert">;
|
|
|
|
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),
|
|
);
|