fix: KoePi Admin-Testbutton sendet Pushover nur noch an den Admin selbst, echter Cron bleibt fuer alle

This commit is contained in:
2026-07-12 16:34:13 +02:00
parent ac269dbb55
commit c432fba7a2

View File

@@ -425,11 +425,18 @@ function formatOfferMessage(offers) {
.join('\n');
}
async function sendKoepiPushover(offers) {
const recipients = db.prepare(`
SELECT user_key, app_token FROM pushover_settings
WHERE user_key IS NOT NULL AND app_token IS NOT NULL
`).all();
// onlyUserId gesetzt: nur an diesen einen Nutzer schicken (z.B. Admin-Testklick),
// sonst an alle Nutzer mit hinterlegtem Pushover (echter Tages-Cron)
async function sendKoepiPushover(offers, onlyUserId = null) {
const recipients = onlyUserId
? db.prepare(`
SELECT user_key, app_token FROM pushover_settings
WHERE user_id = ? AND user_key IS NOT NULL AND app_token IS NOT NULL
`).all(onlyUserId)
: db.prepare(`
SELECT user_key, app_token FROM pushover_settings
WHERE user_key IS NOT NULL AND app_token IS NOT NULL
`).all();
const message = formatOfferMessage(offers);
for (const r of recipients) {
try {
@@ -467,9 +474,10 @@ async function refreshOffersOnly() {
}
}
// Wird täglich um 06:00 vom Scheduler in index.js aufgerufen.
// forceNotify=true (manueller Admin-Test): Pushover wird auch ohne Änderung verschickt.
async function runDailyCheck(forceNotify = false) {
// Wird täglich um 06:00 vom Scheduler in index.js aufgerufen (ohne onlyUserId
// → geht an alle). forceNotify=true (manueller Admin-Test): Pushover wird auch
// ohne Änderung verschickt; onlyUserId gesetzt: nur an diesen einen Nutzer.
async function runDailyCheck(forceNotify = false, onlyUserId = null) {
try {
const { offers } = await scrapeMarktguru(true);
const currentSig = offerSignature(offers);
@@ -482,10 +490,10 @@ async function runDailyCheck(forceNotify = false) {
return { changed: false, sent: false, offerCount: offers.length };
}
await sendKoepiPushover(offers);
await sendKoepiPushover(offers, onlyUserId);
db.prepare('INSERT OR REPLACE INTO admin_settings (key, value) VALUES (?, ?)')
.run(KOEPI_SETTINGS_KEY, currentSig);
console.log(`🍺 KöPi-Check: ${offers.length} Angebot(e)${changed ? ' geändert' : ' (Test, unverändert)'} Pushover versendet.`);
console.log(`🍺 KöPi-Check: ${offers.length} Angebot(e)${changed ? ' geändert' : ' (Test, unverändert)'} Pushover versendet${onlyUserId ? ` (nur an User ${onlyUserId})` : ''}.`);
mqttClient.publishKoepiState({ offers, changed });
return { changed, sent: true, offerCount: offers.length };
} catch (e) {
@@ -514,11 +522,12 @@ router.post('/clear-cache', authenticate, (req, res) => {
res.json({ ok: true });
});
// Manueller Test des Tages-Checks (Admin) — sendet Pushover auch ohne echte Änderung
// Manueller Test des Tages-Checks (Admin) — sendet Pushover auch ohne echte
// Änderung, aber NUR an den Admin selbst (nicht an alle Nutzer)
router.post('/run-daily-check', authenticate, async (req, res) => {
if (req.user?.role !== 'admin') return res.status(403).json({ error: 'Kein Zugriff' });
try {
const result = await runDailyCheck(true);
const result = await runDailyCheck(true, req.user.id);
if (result.error) return res.status(500).json({ error: result.error });
res.json(result);
} catch(e) { res.status(500).json({ error: e.message }); }