Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | 39x 24x | // Shared project cache invalidation utilities
// Consolidates duplicated cache refresh logic from pro route handlers.
import type { Dal } from "../dal";
import type { getDb } from "../db";
import type { Services } from "../services";
import { type DualCache, CACHE_KEYS, MARKETPLACE } from "./cache";
import { precomputeEnrichedProject } from "./project-cache";
import { updateProjectCoverImage } from "./cover-image";
/** Invalidate the pro's project list cache + related marketplace caches.
* NOTE: Does NOT invalidate homepage — homepage has its own 5min TTL
* and only shows featured content. Avoid aggressive invalidation. */
export async function invalidateProjectsListCache(
cache: DualCache,
proId: string,
): Promise<void> {
await Promise.all([
cache.delete(MARKETPLACE.proProjects(proId)),
cache.delete(MARKETPLACE.proFull(proId)),
cache.delete(CACHE_KEYS.MARKETPLACE_ROOM_CATEGORIES),
]);
}
/**
* Re-compute enriched project cache and cover image after content changes.
* Call via c.executionCtx.waitUntil() after photo/room/media mutations.
*/
export async function recomputeProjectAfterContentChange(
projectId: string,
db: ReturnType<typeof getDb>,
dal: Dal,
services: Services,
): Promise<void> {
await Promise.all([
precomputeEnrichedProject(projectId, db, dal, services),
updateProjectCoverImage(projectId, dal, services),
]);
}
|