Media Favoriten: Pushover-Benachrichtigung an User bei Admin-Quittierung

This commit is contained in:
2026-06-24 22:12:04 +02:00
parent 6ac424f378
commit 7fe64c37eb

View File

@@ -862,8 +862,34 @@ router.get('/favorites/unacked', authenticate, (req, res) => {
// POST /favorites/acknowledge-all Admin: alle quittieren // POST /favorites/acknowledge-all Admin: alle quittieren
router.post('/favorites/acknowledge-all', authenticate, requireAdmin, (req, res) => { 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(); db.prepare('UPDATE movie_favorites SET acknowledged=1, acknowledged_at=CURRENT_TIMESTAMP, user_notified=0 WHERE acknowledged=0').run();
res.json({ ok: true }); 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) // 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 // POST /favorites/:id/acknowledge Admin: einzelnen quittieren
router.post('/favorites/:id/acknowledge', authenticate, requireAdmin, (req, res) => { 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 }); 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 // Admin: ALLE verfügbaren Watch-Provider für Deutschland live von TMDb holen