Files
buzz-sheet/lib/cache/public.ts
T
gunshiz 05826eda82
CI / Verify (push) Successful in 1m7s
CI / Build immutable images and deploy (push) Successful in 2m23s
update
2026-09-07 16:57:10 +07:00

64 lines
1.8 KiB
TypeScript

import "server-only";
import { cacheLife, cacheTag } from "next/cache";
import { getPublicPage, listPublicCharacters } from "@/lib/content/queries";
import { getPublicGuide, listPublicGuideCards } from "@/lib/guides/queries";
import {
characterCacheTag,
dataSourceCacheTag,
DIRECTORY_CACHE_TAG,
GLOSSARY_CACHE_TAG,
pageCacheTag,
vectorCacheTag,
} from "@/lib/cache/tags";
export async function getCachedPublicDirectory() {
"use cache: remote";
cacheLife({ stale: 30, revalidate: 60, expire: 60 * 60 });
cacheTag(DIRECTORY_CACHE_TAG);
cacheTag(GLOSSARY_CACHE_TAG);
return listPublicCharacters();
}
export async function getCachedPublicPage(
characterSlug: string,
pageSlug?: string,
) {
"use cache: remote";
cacheLife({ stale: 15, revalidate: 60, expire: 60 * 60 });
const result = await getPublicPage(characterSlug, pageSlug);
cacheTag(DIRECTORY_CACHE_TAG);
cacheTag(GLOSSARY_CACHE_TAG);
if (result.type === "page") {
cacheTag(
pageCacheTag(result.snapshot.page.id),
characterCacheTag(result.snapshot.character.id),
vectorCacheTag(
result.snapshot.page.id,
result.snapshot.page.version,
result.snapshot.versionVector,
),
...Object.keys(result.snapshot.versionVector).map(dataSourceCacheTag),
);
}
return result;
}
export async function getCachedPublicGuideCards() {
"use cache: remote";
cacheLife({ stale: 30, revalidate: 60, expire: 60 * 60 });
cacheTag(DIRECTORY_CACHE_TAG);
cacheTag(GLOSSARY_CACHE_TAG);
return listPublicGuideCards();
}
export async function getCachedPublicGuide(slug: string) {
"use cache: remote";
cacheLife({ stale: 15, revalidate: 60, expire: 60 * 60 });
const result = await getPublicGuide(slug);
cacheTag(GLOSSARY_CACHE_TAG);
if (result) cacheTag(pageCacheTag(result.id));
return result;
}