diff --git a/backend/src/tools/media/routes.js b/backend/src/tools/media/routes.js
index 82edddc..5ad5e81 100644
--- a/backend/src/tools/media/routes.js
+++ b/backend/src/tools/media/routes.js
@@ -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
diff --git a/frontend/src/tools/media.jsx b/frontend/src/tools/media.jsx
index 98951c6..7d104c8 100644
--- a/frontend/src/tools/media.jsx
+++ b/frontend/src/tools/media.jsx
@@ -784,7 +784,7 @@ function FavoritenKalender({ onOpenModal }) {
{!!f.acknowledged && ✓}
- {!f.acknowledged && (
+ {!f.acknowledged ? (
+ ) : (
+
)}
))}