feat: User-Benachrichtigung wenn Admin Favoriten quittiert

This commit is contained in:
2026-06-18 15:31:11 +02:00
parent 62565d95a8
commit e953e6a9ac
3 changed files with 33 additions and 11 deletions

View File

@@ -560,6 +560,8 @@ if (!db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='mov
db.exec("ALTER TABLE movie_favorites ADD COLUMN acknowledged INTEGER NOT NULL DEFAULT 0");
if (!cols.includes('acknowledged_at'))
db.exec("ALTER TABLE movie_favorites ADD COLUMN acknowledged_at DATETIME DEFAULT NULL");
if (!cols.includes('user_notified'))
db.exec("ALTER TABLE movie_favorites ADD COLUMN user_notified INTEGER NOT NULL DEFAULT 0");
if (!cols.includes('media_type'))
db.exec("ALTER TABLE movie_favorites ADD COLUMN media_type TEXT NOT NULL DEFAULT 'movie'");
}

View File

@@ -503,18 +503,28 @@ router.get('/favorites/all', authenticate, requireAdmin, (req, res) => {
res.json(favs);
});
// GET /favorites/unacked unquittierte Zählung
// GET /favorites/unacked unquittierte Zählung (Admin: neue Favoriten; User: quittierte aber unbestätigte)
router.get('/favorites/unacked', authenticate, (req, res) => {
const isAdmin = req.user.role === 'admin';
const count = isAdmin
? db.prepare('SELECT COUNT(*) as n FROM movie_favorites WHERE acknowledged=0').get()
: db.prepare('SELECT COUNT(*) as n FROM movie_favorites WHERE user_id=? AND acknowledged=0').get(req.user.id);
res.json({ count: count.n });
if (isAdmin) {
const count = db.prepare('SELECT COUNT(*) as n FROM movie_favorites WHERE acknowledged=0').get();
res.json({ count: count.n, isAdmin: true });
} else {
// User: Favoriten die vom Admin quittiert wurden aber User noch nicht gesehen hat
const count = db.prepare('SELECT COUNT(*) as n FROM movie_favorites WHERE user_id=? AND acknowledged=1 AND user_notified=0').get(req.user.id);
res.json({ count: count.n, isAdmin: false });
}
});
// POST /favorites/user-notify User bestätigt Kenntnis der quittierten Favoriten
router.post('/favorites/user-notify', authenticate, (req, res) => {
db.prepare('UPDATE movie_favorites SET user_notified=1 WHERE user_id=? AND acknowledged=1 AND user_notified=0').run(req.user.id);
res.json({ ok: true });
});
// POST /favorites/acknowledge-all Admin: alle quittieren
router.post('/favorites/acknowledge-all', authenticate, requireAdmin, (req, res) => {
db.prepare('UPDATE movie_favorites SET acknowledged=1, acknowledged_at=CURRENT_TIMESTAMP 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 });
});
@@ -563,7 +573,7 @@ router.delete('/favorites/:tmdb_id', authenticate, (req, res) => {
// POST /favorites/:id/acknowledge Admin: einzelnen quittieren
router.post('/favorites/:id/acknowledge', authenticate, requireAdmin, (req, res) => {
db.prepare('UPDATE movie_favorites SET acknowledged=1, acknowledged_at=CURRENT_TIMESTAMP WHERE id=?').run(req.params.id);
db.prepare('UPDATE movie_favorites SET acknowledged=1, acknowledged_at=CURRENT_TIMESTAMP, user_notified=0 WHERE id=?').run(req.params.id);
res.json({ ok: true });
});