import { type CacheTime, type DataCache } from "@/services/dataCache/Cache" import { cacheLogger } from "@/services/dataCache/logger" import { get } from "./get" import { set } from "./set" export const cacheOrGet: DataCache["cacheOrGet"] = async ( key: string | string[], callback: () => Promise, ttl: CacheTime ): Promise => { if (Array.isArray(key)) { key = key.join("-") } const cached = await get(key) if (cached) { return cached as T } cacheLogger.debug(`Miss for key '${key}'`) try { const data = await callback() await set(key, data, ttl) return data } catch (e) { cacheLogger.error( `Error while fetching data for key '${key}', avoid caching`, e ) throw e } }