feat: xREL on-demand per Button im Modal, Badge nach Fund, kein Auto-Check mehr

This commit is contained in:
2026-06-11 01:50:55 +02:00
parent 8cc0134059
commit 26059556ac
2 changed files with 67 additions and 119 deletions

View File

@@ -244,14 +244,20 @@ router.get('/movie/:id', authenticate, async (req, res) => {
} catch(e) { res.status(500).json({ error: e.message }); }
});
// xREL separat lädt im Hintergrund, cached per tmdb_id
// xREL on-demand ?refresh=1 ignoriert den Cache (erneute Suche)
router.get('/movie/:id/xrel', authenticate, async (req, res) => {
try {
const cacheKey = `xrel:tmdb:${req.params.id}`;
const cached = cacheGet(cacheKey);
if (cached !== undefined) return res.json({ xrel: cached, has_xrel: cached.length > 0 });
const forceRefresh = req.query.refresh === '1';
if (!forceRefresh) {
const cached = cacheGet(cacheKey);
if (cached !== undefined) return res.json({ xrel: cached, has_xrel: cached.length > 0 });
} else {
// Cache-Eintrag löschen für diesen Film
db.prepare('DELETE FROM xrel_cache WHERE cache_key=?').run(cacheKey);
}
// Brauchen Titel + IMDb-ID
const [detail, extIds] = await Promise.all([
tmdb(`/movie/${req.params.id}`, { append_to_response: '' }).catch(()=>({})),
tmdb(`/movie/${req.params.id}/external_ids`).catch(()=>({})),
@@ -262,23 +268,7 @@ router.get('/movie/:id/xrel', authenticate, async (req, res) => {
} catch(e) { res.status(500).json({ error: e.message }); }
});
// Badge-Check: bis zu 3 Filme parallel, cached in xrel:tmdb:ID
router.post('/xrel-check', authenticate, async (req, res) => {
const movies = (req.body.movies||[]).slice(0,3);
if (!movies.length) return res.json({});
const result = {};
await Promise.all(movies.map(async m => {
const cacheKey = `xrel:tmdb:${m.id}`;
const cached = cacheGet(cacheKey);
if (cached !== undefined) { result[m.id] = cached.length > 0; return; }
try {
const xrel = await getXrelData(m.id, m.imdb_id||null, m.title, m.original_title);
result[m.id] = xrel.length > 0;
} catch(_) { result[m.id] = false; }
}));
res.json(result);
});
router.get('/favorites', authenticate, (req, res) => {
res.json(db.prepare('SELECT * FROM movie_favorites WHERE user_id=? ORDER BY release_date ASC').all(req.user.id));
@@ -304,8 +294,6 @@ router.put('/settings', authenticate, requireAdmin, (req, res) => {
genreCache = null;
res.json({ ok: true });
});
router.delete('/xrel-cache', authenticate, requireAdmin, (req, res) => {
res.json({ deleted: db.prepare('DELETE FROM xrel_cache').run().changes });
});
module.exports = router;