Push-Erinnerungen: Widget, Backend-Scheduler, Pushover-Versand jede Minute

This commit is contained in:
2026-05-28 19:00:48 +02:00
parent cc6a1c6dc7
commit 7ec2879f73
4 changed files with 204 additions and 0 deletions

View File

@@ -68,3 +68,33 @@ app.use(express.static(PUBLIC));
app.get('*', (_req, res) => res.sendFile(path.join(PUBLIC, 'index.html')));
app.listen(4000, () => console.log('🚀 Dicken Dock läuft auf Port 4000'));
// ── Push-Zeitplaner Hintergrund-Job ──────────────────────────────────────────
const db = require('./db');
async function sendPushoverMsg(userKey, appToken, message) {
try {
await fetch('https://api.pushover.net/1/messages.json', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({ token: appToken, user: userKey, title: 'DickenDock Erinnerung', message }),
});
} catch(e) { console.error('Pushover Fehler:', e.message); }
}
setInterval(async () => {
try {
const due = db.prepare(`
SELECT s.*, p.user_key, p.app_token
FROM push_schedules s
JOIN pushover_settings p ON p.user_id = s.user_id
WHERE s.sent = 0 AND s.scheduled_at <= datetime('now','localtime')
`).all();
for (const row of due) {
await sendPushoverMsg(row.user_key, row.app_token, row.message);
db.prepare('UPDATE push_schedules SET sent=1 WHERE id=?').run(row.id);
console.log(`✓ Push gesendet an user ${row.user_id}: ${row.message}`);
}
} catch(e) { console.error('Push-Job Fehler:', e.message); }
}, 60 * 1000); // jede Minute