import "server-only"; import { randomUUID } from "node:crypto"; import { cached } from "@/lib/cache"; import { logger } from "@/lib/logger"; import { redis } from "@/lib/redis"; const REVISION_KEY = "cms:news:revision"; export async function cacheNews( key: string, ttlMs: number, query: () => Promise, ): Promise { if (!redis || redis.status === "end") return query(); let revision: string; try { revision = (await redis.get(REVISION_KEY)) ?? "0"; } catch { return query(); } return cached(`news:${revision}:${key}`, ttlMs, query); } export async function invalidateNewsCache(): Promise { if (!redis || redis.status === "end") return; try { await redis.set(REVISION_KEY, randomUUID()); } catch (error) { logger.error("News saved but public cache invalidation failed", { module: "news", error, }); } }