feat(cache): read cache TTLs from storage settings and renew tracked TMDB details (CACHE-2)

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
rootandClaude Opus 5.5 committed 2026-09-29 17:16:50 +08:00
1 parent 58e358e4a9
commit 85b352b8eb
10 files changed
+140 -35

No files matched your search

@@ -468,18 +468,21 @@ describe.skipIf(!up)("resolveObservation / 身份与元数据", () => {
).rows;
const opp = (await rows()).find((r) => r.key === "[未知][zh-CN]Oppenheimer-2023-None");
expect(opp?.value).toMatchObject({ id: 872585, type: "movie", title: "奥本海默" });
expect(Number(opp!.minutes)).toBeGreaterThan(23 * 60);
// 正常条目按搜索类 TTL(storage.cacheTtl.tmdbSearchDays,缺省 7 天)
expect(Number(opp!.minutes)).toBeGreaterThan(7 * 24 * 60 - 5);
expect(Number(opp!.minutes)).toBeLessThanOrEqual(7 * 24 * 60);
// 同名同年的另一条资源:命中识别缓存,不再调 TMDB 搜索
const searches = tmdb.callsTo(/\/3\/search\//).length;
const again = await release("Oppenheimer.2023.1080p.BluRay.x264-OTHER");
await resolveRelease(h.rt, { sourceReleaseId: again.id });
expect(tmdb.callsTo(/\/3\/search\//).length).toBe(searches);
// 查无此项 → 负缓存 {id: 0},TTL = 空结果短 TTL(30 分钟)
// 查无此项 → 负缓存 {id: 0},TTL = 未命中 TTL(storage.cacheTtl.tmdbMissDays,缺省 1 天)
const none = await release("Zzqxv.Nonexistent.Title.2019.1080p.WEB-DL-NOGRP");
await resolveRelease(h.rt, { sourceReleaseId: none.id });
const neg = (await rows()).find((r) => r.key === "[未知][zh-CN]Zzqxv Nonexistent Title-2019-None");
expect(neg?.value).toEqual({ id: 0 });
expect(Number(neg!.minutes)).toBeLessThanOrEqual(30);
expect(Number(neg!.minutes)).toBeLessThanOrEqual(24 * 60);
expect(Number(neg!.minutes)).toBeGreaterThan(24 * 60 - 5);
const s2 = tmdb.callsTo(/\/3\/search\//).length;
await resolveRelease(h.rt, { sourceReleaseId: none.id });
expect(tmdb.callsTo(/\/3\/search\//).length).toBe(s2);