Media Favoriten: Dequittierung für Admin + Pushover-Info an User
This commit is contained in:
@@ -960,6 +960,31 @@ router.post('/favorites/:id/acknowledge', authenticate, requireAdmin, (req, res)
|
|||||||
} catch {}
|
} catch {}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// POST /favorites/:id/unacknowledge – Admin: Quittierung rückgängig machen
|
||||||
|
router.post('/favorites/:id/unacknowledge', authenticate, requireAdmin, (req, res) => {
|
||||||
|
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=0, acknowledged_at=NULL, user_notified=0 WHERE id=?').run(fav.id);
|
||||||
|
res.json({ ok: true });
|
||||||
|
// Pushover an den User — Quittierung zurückgezogen (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 zurückgezogen',
|
||||||
|
message: `Die Bestätigung für "${fav.title}" wurde vom Admin zurückgezogen.`,
|
||||||
|
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
|
||||||
// Admin: Streaming-Top10-Cache leeren (z.B. nach Logik-Änderungen)
|
// Admin: Streaming-Top10-Cache leeren (z.B. nach Logik-Änderungen)
|
||||||
// Debug: rohe TMDb-Treffer pro Anbieter/Schwelle prüfen
|
// Debug: rohe TMDb-Treffer pro Anbieter/Schwelle prüfen
|
||||||
|
|||||||
@@ -784,7 +784,7 @@ function FavoritenKalender({ onOpenModal }) {
|
|||||||
{!!f.acknowledged && <span style={{marginLeft:6}}>✓</span>}
|
{!!f.acknowledged && <span style={{marginLeft:6}}>✓</span>}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{!f.acknowledged && (
|
{!f.acknowledged ? (
|
||||||
<button onClick={async e=>{e.stopPropagation();
|
<button onClick={async e=>{e.stopPropagation();
|
||||||
await api(`/tools/media/favorites/${f.id}/acknowledge`,{method:'POST',body:{}});
|
await api(`/tools/media/favorites/${f.id}/acknowledge`,{method:'POST',body:{}});
|
||||||
setAllFavs(prev=>prev.map(x=>x.id===f.id?{...x,acknowledged:1}:x));
|
setAllFavs(prev=>prev.map(x=>x.id===f.id?{...x,acknowledged:1}:x));
|
||||||
@@ -792,6 +792,15 @@ function FavoritenKalender({ onOpenModal }) {
|
|||||||
borderRadius:6,padding:'3px 10px',color:'#f59e0b',fontFamily:'monospace',fontSize:9,cursor:'pointer',flexShrink:0}}>
|
borderRadius:6,padding:'3px 10px',color:'#f59e0b',fontFamily:'monospace',fontSize:9,cursor:'pointer',flexShrink:0}}>
|
||||||
✓
|
✓
|
||||||
</button>
|
</button>
|
||||||
|
) : (
|
||||||
|
<button onClick={async e=>{e.stopPropagation();
|
||||||
|
await api(`/tools/media/favorites/${f.id}/unacknowledge`,{method:'POST',body:{}});
|
||||||
|
setAllFavs(prev=>prev.map(x=>x.id===f.id?{...x,acknowledged:0}:x));
|
||||||
|
}} title="Quittierung rückgängig"
|
||||||
|
style={{background:'transparent',border:'1px solid rgba(255,255,255,0.1)',
|
||||||
|
borderRadius:6,padding:'3px 8px',color:'rgba(255,255,255,0.25)',fontFamily:'monospace',fontSize:9,cursor:'pointer',flexShrink:0}}>
|
||||||
|
↩
|
||||||
|
</button>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
|
|||||||
Reference in New Issue
Block a user