90 lines
2.5 KiB
TypeScript
90 lines
2.5 KiB
TypeScript
import "server-only";
|
|
|
|
import { cacheLife, cacheTag } from "next/cache";
|
|
|
|
import { getPublicPage, listPublicCharacters } from "@/lib/content/queries";
|
|
import {
|
|
getPublicArtifactExport,
|
|
getPublicGuide,
|
|
getPublicTeamExport,
|
|
getPublicWeaponExport,
|
|
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;
|
|
}
|
|
|
|
export async function getCachedPublicWeaponExport(guideId: string) {
|
|
"use cache: remote";
|
|
cacheLife({ stale: 15, revalidate: 60, expire: 60 * 60 });
|
|
const result = await getPublicWeaponExport(guideId);
|
|
cacheTag(pageCacheTag(guideId));
|
|
return result;
|
|
}
|
|
|
|
export async function getCachedPublicArtifactExport(guideId: string) {
|
|
"use cache: remote";
|
|
cacheLife({ stale: 15, revalidate: 60, expire: 60 * 60 });
|
|
const result = await getPublicArtifactExport(guideId);
|
|
cacheTag(pageCacheTag(guideId));
|
|
return result;
|
|
}
|