diff --git a/backend/src/tools/media/routes.js b/backend/src/tools/media/routes.js index ede6834..82edddc 100644 --- a/backend/src/tools/media/routes.js +++ b/backend/src/tools/media/routes.js @@ -862,8 +862,34 @@ router.get('/favorites/unacked', authenticate, (req, res) => { // POST /favorites/acknowledge-all – Admin: alle quittieren router.post('/favorites/acknowledge-all', authenticate, requireAdmin, (req, res) => { + // Betroffene Favoriten vor dem Update holen (für Pushover-Benachrichtigungen) + const toAck = db.prepare('SELECT id, user_id, title FROM movie_favorites WHERE acknowledged=0').all(); db.prepare('UPDATE movie_favorites SET acknowledged=1, acknowledged_at=CURRENT_TIMESTAMP, user_notified=0 WHERE acknowledged=0').run(); res.json({ ok: true }); + // Pushover an jeden betroffenen User (fire & forget, pro User gruppiert) + try { + // User mit Pushover-Konfiguration ermitteln + const userIds = [...new Set(toAck.map(f => f.user_id))]; + for (const userId of userIds) { + const poCfg = db.prepare('SELECT user_key, app_token FROM pushover_settings WHERE user_id=?').get(userId); + if (!poCfg?.app_token || !poCfg?.user_key) continue; + const userFavs = toAck.filter(f => f.user_id === userId); + const message = userFavs.length === 1 + ? `"${userFavs[0].title}" wurde von einem Admin bestätigt.` + : `${userFavs.length} deiner Favoriten wurden von einem Admin bestätigt.`; + fetch('https://api.pushover.net/1/messages.json', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + token: poCfg.app_token, + user: poCfg.user_key, + title: '✅ Favoriten bestätigt', + message, + priority: 0, + }), + }).catch(() => {}); + } + } catch {} }); // POST /favorites – Favorit hinzufügen (alle User inkl. Admin bekommen Pushover) @@ -911,8 +937,27 @@ router.delete('/favorites/:tmdb_id', authenticate, (req, res) => { // POST /favorites/:id/acknowledge – Admin: einzelnen quittieren router.post('/favorites/:id/acknowledge', authenticate, requireAdmin, (req, res) => { - db.prepare('UPDATE movie_favorites SET acknowledged=1, acknowledged_at=CURRENT_TIMESTAMP, user_notified=0 WHERE id=?').run(req.params.id); + const fav = db.prepare('SELECT * FROM movie_favorites WHERE id=?').get(req.params.id); + if (!fav) return res.status(404).json({ error: 'Nicht gefunden' }); + db.prepare('UPDATE movie_favorites SET acknowledged=1, acknowledged_at=CURRENT_TIMESTAMP, user_notified=0 WHERE id=?').run(fav.id); res.json({ ok: true }); + // Pushover an den User schicken falls eingerichtet (fire & forget) + try { + const poCfg = db.prepare('SELECT user_key, app_token FROM pushover_settings WHERE user_id=?').get(fav.user_id); + if (poCfg?.app_token && poCfg?.user_key) { + fetch('https://api.pushover.net/1/messages.json', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + token: poCfg.app_token, + user: poCfg.user_key, + title: '✅ Favorit bestätigt', + message: `"${fav.title}" wurde von einem Admin bestätigt.`, + priority: 0, + }), + }).catch(() => {}); + } + } catch {} }); // Admin: ALLE verfügbaren Watch-Provider für Deutschland live von TMDb holen