import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import type { CacheClearResult, CacheRegionList, ImageCacheStatus, TmdbCacheList } from "@umt/contracts"; import { apiData } from "~/lib/api.ts"; // C2-A 缓存管理:TMDB 缓存(条数 / 上限 / TTL / 清空)、图片代理缓存(用量 / 清空)、通用缓存按区统计与清空 const keys = { tmdb: ["cache", "tmdb"] as const, images: ["cache", "images"] as const, regions: ["cache", "regions"] as const, }; export function useTmdbCache() { return useQuery({ queryKey: keys.tmdb, queryFn: ({ signal }) => apiData("/cache/tmdb?limit=1", { signal }), }); } export function useClearTmdbCache() { const qc = useQueryClient(); return useMutation({ mutationFn: () => apiData("/cache/tmdb/clear", { method: "POST" }), onSuccess: () => qc.invalidateQueries({ queryKey: ["cache"] }), }); } export function useImageCache() { return useQuery({ queryKey: keys.images, queryFn: ({ signal }) => apiData("/cache/images", { signal }), }); } export function useClearImageCache() { const qc = useQueryClient(); return useMutation({ mutationFn: () => apiData("/cache/images/clear", { method: "POST" }), onSuccess: () => qc.invalidateQueries({ queryKey: keys.images }), }); } export function useCacheRegions() { return useQuery({ queryKey: keys.regions, queryFn: ({ signal }) => apiData("/cache/regions", { signal }), }); } /** 清空一个区;TMDB 两个区也在这里清,顺带刷新 TMDB 缓存计数 */ export function useClearCacheRegion() { const qc = useQueryClient(); return useMutation({ mutationFn: (region: string) => apiData(`/cache/regions/${encodeURIComponent(region)}/clear`, { method: "POST" }), onSuccess: () => qc.invalidateQueries({ queryKey: ["cache"] }), }); }