feat: cms cache

This commit is contained in:
Linus Flood
2024-10-14 10:08:26 +02:00
parent 81ece30a0d
commit a91c8ed928
5 changed files with 57 additions and 14 deletions

View File

@@ -1,5 +1,9 @@
import { stringify } from "querystring"
import { Lang } from "@/constants/languages"
import { env } from "@/env/server"
import { resolve as resolveEntry } from "@/utils/entry"
import { findLang } from "@/utils/languages"
import { removeTrailingSlash } from "@/utils/url"
@@ -31,3 +35,43 @@ export function getDefaultRequestHeaders(request: NextRequest) {
return headers
}
type ContentStackResponse = {
contentType: string | null
uid: string | null
expiresAt: number
}
const entryResponseCache: Map<string, ContentStackResponse> = new Map()
let size: number = 0
export const fetchAndCacheEntry = async (path: string, lang?: Lang) => {
const cacheKey = `${path + lang}`
const cachedResponse = entryResponseCache.get(cacheKey)
if (cachedResponse && cachedResponse.expiresAt > Date.now() / 1000) {
console.log("[CMS MIDDLEWARE]: CACHE HIT")
return cachedResponse
}
if (cachedResponse && cachedResponse.expiresAt < Date.now() / 1000) {
console.log("[CMS MIDDLEWARE]: CACHE STALE")
size -= JSON.stringify(cachedResponse).length
entryResponseCache.delete(cacheKey)
} else {
console.log("[CMS MIDDLEWARE]: CACHE MISS")
}
const { contentType, uid } = await resolveEntry(path, lang)
const expiresAt = Date.now() / 1000 + 3600
const entryCache = { contentType, uid, expiresAt }
size += JSON.stringify(entryCache).length
console.log("[CMS MIDDLEWARE] Adding to cache", entryCache)
console.log("[CMS MIDDLEWARE] Cache size (total)", size)
entryResponseCache.set(cacheKey, entryCache)
return {
contentType,
uid,
}
}