fix: xREL Sonderzeichen im Titel entfernen, leere Ergebnisse nur 30min cachen, Cache-Clear Endpoint

This commit is contained in:
2026-06-10 22:38:40 +02:00
parent bceaf49bfa
commit 77c5af01c9

View File

@@ -118,14 +118,30 @@ function enrichMovie(movie, genreMap, fsk, rank) {
// Jeder Eintrag hat ext_info.title für exakten Match + main_lang für German-Filter // Jeder Eintrag hat ext_info.title für exakten Match + main_lang für German-Filter
// Das spart den ext_info_id Lookup komplett // Das spart den ext_info_id Lookup komplett
// Sonderzeichen aus Suchtitel entfernen die xREL verwirren
function cleanTitle(t) {
return (t || '').replace(/[*#@!?]/g, '').replace(/\s+/g, ' ').trim();
}
async function xrelSearchGerman(title, originalTitle) { async function xrelSearchGerman(title, originalTitle) {
const cacheKey = `xrel:${originalTitle || title}`.toLowerCase(); const cleanOrig = cleanTitle(originalTitle);
const cleanTitle_ = cleanTitle(title);
const cacheKey = `xrel:${cleanOrig || cleanTitle_}`.toLowerCase();
const cached = dbCacheGet(cacheKey); const cached = dbCacheGet(cacheKey);
if (cached !== undefined) return cached; if (cached !== undefined) return cached;
const queries = [originalTitle, title].filter(Boolean) // Queries: original ohne Sonderzeichen, dann deutsch, dann ohne Artikel
const rawQueries = [cleanOrig, cleanTitle_]
.filter(Boolean)
.filter((v, i, a) => a.indexOf(v) === i); .filter((v, i, a) => a.indexOf(v) === i);
// Zusätzlich: deutschen Artikel entfernen (Der/Die/Das am Anfang)
const extraQueries = rawQueries
.map(q => q.replace(/^(Der|Die|Das|Ein|Eine)\s+/i, '').trim())
.filter(q => q && !rawQueries.includes(q));
const queries = [...rawQueries, ...extraQueries];
const results = []; const results = [];
const seen = new Set(); const seen = new Set();
@@ -182,7 +198,13 @@ async function xrelSearchGerman(title, originalTitle) {
} }
results.sort((a, b) => (b.date || '').localeCompare(a.date || '')); results.sort((a, b) => (b.date || '').localeCompare(a.date || ''));
dbCacheSet(cacheKey, results); // Leere Ergebnisse nur kurz cachen (30 Min) damit xREL später nochmal gefragt wird
if (results.length > 0) {
dbCacheSet(cacheKey, results);
} else {
db.prepare('INSERT OR REPLACE INTO xrel_cache (cache_key, value, expires_at) VALUES (?,?,?)')
.run(cacheKey, '[]', Date.now() + 30 * 60 * 1000);
}
return results; return results;
} }
@@ -301,4 +323,10 @@ router.put('/settings', authenticate, requireAdmin, (req, res) => {
res.json({ ok: true }); res.json({ ok: true });
}); });
// DELETE /api/tools/media/xrel-cache Cache leeren (Admin)
router.delete('/xrel-cache', authenticate, requireAdmin, (req, res) => {
const info = db.prepare('DELETE FROM xrel_cache').run();
res.json({ deleted: info.changes });
});
module.exports = router; module.exports = router;