Media Favoriten: Dequittierung für Admin + Pushover-Info an User

This commit is contained in:
2026-06-24 22:28:22 +02:00
parent 7fe64c37eb
commit 8f8e49f749
2 changed files with 35 additions and 1 deletions

View File

@@ -960,6 +960,31 @@ router.post('/favorites/:id/acknowledge', authenticate, requireAdmin, (req, res)
} 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: Streaming-Top10-Cache leeren (z.B. nach Logik-Änderungen)
// Debug: rohe TMDb-Treffer pro Anbieter/Schwelle prüfen

View File

@@ -784,7 +784,7 @@ function FavoritenKalender({ onOpenModal }) {
{!!f.acknowledged && <span style={{marginLeft:6}}>✓</span>}
</div>
</div>
{!f.acknowledged && (
{!f.acknowledged ? (
<button onClick={async e=>{e.stopPropagation();
await api(`/tools/media/favorites/${f.id}/acknowledge`,{method:'POST',body:{}});
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}}>
</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>
))}