feat: cms cache
This commit is contained in:
@@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user