import { type CacheTime, type DataCache } from "@/services/dataCache/Cache" import { cacheLogger } from "../logger" import { generateCacheKey } from "./generateCacheKey" import { get } from "./get" import { set } from "./set" export const cacheOrGet: DataCache["cacheOrGet"] = async ( key: string | string[], callback: () => Promise, ttl: CacheTime ) => { const cacheKey = generateCacheKey(key) const cachedValue = await get(cacheKey) if (!cachedValue) { const perf = performance.now() const data = await callback() cacheLogger.debug( `Getting data '${cacheKey}' took ${(performance.now() - perf).toFixed(2)}ms` ) await set(cacheKey, data, ttl) return data } return cachedValue }