Media Favoriten: Pushover-Benachrichtigung an User bei Admin-Quittierung
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user