fix: xREL leere Cache-Einträge bei manuellem Suchen ignorieren, Titel als Query-Params

This commit is contained in:
2026-06-11 02:01:35 +02:00
parent 26059556ac
commit 9076fbcc0b
2 changed files with 30 additions and 11 deletions

View File

@@ -244,7 +244,7 @@ router.get('/movie/:id', authenticate, async (req, res) => {
} catch(e) { res.status(500).json({ error: e.message }); }
});
// xREL on-demand ?refresh=1 ignoriert den Cache (erneute Suche)
// xREL on-demand ?refresh=1 ignoriert Cache, ?imdb_id=tt...&title=...&orig=... vermeidet TMDb-Calls
router.get('/movie/:id/xrel', authenticate, async (req, res) => {
try {
const cacheKey = `xrel:tmdb:${req.params.id}`;
@@ -252,18 +252,31 @@ router.get('/movie/:id/xrel', authenticate, async (req, res) => {
if (!forceRefresh) {
const cached = cacheGet(cacheKey);
if (cached !== undefined) return res.json({ xrel: cached, has_xrel: cached.length > 0 });
// Nur nicht-leere Cache-Einträge sofort zurückgeben
// Leere Einträge → nochmal suchen (könnte Rate-Limit-Artefakt sein)
if (cached !== undefined && cached.length > 0) {
return res.json({ xrel: cached, has_xrel: true });
}
} else {
// Cache-Eintrag löschen für diesen Film
db.prepare('DELETE FROM xrel_cache WHERE cache_key=?').run(cacheKey);
}
const [detail, extIds] = await Promise.all([
tmdb(`/movie/${req.params.id}`, { append_to_response: '' }).catch(()=>({})),
tmdb(`/movie/${req.params.id}/external_ids`).catch(()=>({})),
]);
const imdbId = extIds.imdb_id || null;
const xrel = await getXrelData(req.params.id, imdbId, detail.title, detail.original_title);
// Titel + IMDb-ID aus Query-Params wenn vorhanden (spart 2 TMDb-Calls)
let imdbId = req.query.imdb_id || null;
let title = req.query.title || null;
let origTitle = req.query.orig || null;
if (!title) {
const [detail, extIds] = await Promise.all([
tmdb(`/movie/${req.params.id}`, { append_to_response: '' }).catch(()=>({})),
tmdb(`/movie/${req.params.id}/external_ids`).catch(()=>({})),
]);
imdbId = extIds.imdb_id || null;
title = detail.title || null;
origTitle = detail.original_title || null;
}
const xrel = await getXrelData(req.params.id, imdbId, title, origTitle);
res.json({ xrel, has_xrel: xrel.length > 0 });
} catch(e) { res.status(500).json({ error: e.message }); }
});