freshyo/packages/db_helper_sqlite/src/admin-apis/const.ts
2026-03-30 21:59:23 +05:30

78 lines
2.1 KiB
TypeScript

import { db } from '../db/db_index'
import { keyValStore } from '../db/schema'
import { eq } from 'drizzle-orm'
import { CONST_KEYS, castConstValue } from '../lib/const-keys'
export interface Constant {
key: string
value: any
}
export async function getAllConstants(): Promise<Constant[]> {
const constants = await db.select().from(keyValStore)
return constants.map(c => ({
key: c.key,
value: castConstValue(c.key, c.value),
}))
}
export async function upsertConstants(constants: Constant[]): Promise<void> {
await db.transaction(async (tx) => {
for (const { key, value } of constants) {
// const castedValue = castConstValue(key, value)
const castedValue = value+'';
const existing = await tx.query.keyValStore.findFirst({
where: eq(keyValStore.key, key),
columns: { key: true },
})
if (existing) {
await tx.update(keyValStore)
.set({ value: castedValue })
.where(eq(keyValStore.key, key))
} else {
await tx.insert(keyValStore)
.values({ key, value: castedValue })
}
}
})
}
const CACHE_VERSION_KEY = CONST_KEYS.cacheVersion
const parseCacheVersion = (value: unknown) => {
const parsed = Number(value)
return Number.isFinite(parsed) ? parsed : 0
}
export async function getCacheVersion(): Promise<number> {
const record = await db.query.keyValStore.findFirst({
where: eq(keyValStore.key, CACHE_VERSION_KEY),
columns: { value: true },
})
return record ? parseCacheVersion(record.value) : 0
}
export async function incrementCacheVersion(): Promise<number> {
return db.transaction(async (tx) => {
const existing = await tx.query.keyValStore.findFirst({
where: eq(keyValStore.key, CACHE_VERSION_KEY),
columns: { value: true },
})
const nextValue = parseCacheVersion(existing?.value) + 1
if (existing) {
await tx.update(keyValStore)
.set({ value: nextValue })
.where(eq(keyValStore.key, CACHE_VERSION_KEY))
} else {
await tx.insert(keyValStore)
.values({ key: CACHE_VERSION_KEY, value: nextValue })
}
return nextValue
})
}