Files
buzz-sheet/lib/cache/public.ts
T
gunshiz dd672e5331
CI / Verify (push) Successful in 58s
CI / Build immutable images and deploy (push) Successful in 2m54s
feat(image-export) : capture guide sections in browser
2026-09-02 22:28:28 +07:00

72 lines
2.0 KiB
TypeScript

import "server-only";
import { cacheLife, cacheTag } from "next/cache";
import { getPublicPage, listPublicCharacters } from "@/lib/content/queries";
import {
getPublicGuide,
getPublicTeamExport,
listGuideCards,
} from "@/lib/guides/queries";
import {
characterCacheTag,
dataSourceCacheTag,
DIRECTORY_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);
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);
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);
return listGuideCards();
}
export async function getCachedPublicGuide(slug: string) {
"use cache: remote";
cacheLife({ stale: 15, revalidate: 60, expire: 60 * 60 });
const result = await getPublicGuide(slug);
cacheTag(DIRECTORY_CACHE_TAG);
if (result) cacheTag(pageCacheTag(result.id));
return result;
}
export async function getCachedPublicTeamExport(teamId: string) {
"use cache: remote";
cacheLife({ stale: 15, revalidate: 60, expire: 60 * 60 });
const result = await getPublicTeamExport(teamId);
if (result) cacheTag(pageCacheTag(result.guideId));
return result;
}