feat: xREL on-demand per Button im Modal, Badge nach Fund, kein Auto-Check mehr
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user