fix: KoePi Admin-Testbutton sendet Pushover nur noch an den Admin selbst, echter Cron bleibt fuer alle
This commit is contained in:
@@ -425,8 +425,15 @@ function formatOfferMessage(offers) {
|
|||||||
.join('\n');
|
.join('\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
async function sendKoepiPushover(offers) {
|
// onlyUserId gesetzt: nur an diesen einen Nutzer schicken (z.B. Admin-Testklick),
|
||||||
const recipients = db.prepare(`
|
// 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
|
SELECT user_key, app_token FROM pushover_settings
|
||||||
WHERE user_key IS NOT NULL AND app_token IS NOT NULL
|
WHERE user_key IS NOT NULL AND app_token IS NOT NULL
|
||||||
`).all();
|
`).all();
|
||||||
@@ -467,9 +474,10 @@ async function refreshOffersOnly() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wird täglich um 06:00 vom Scheduler in index.js aufgerufen.
|
// Wird täglich um 06:00 vom Scheduler in index.js aufgerufen (ohne onlyUserId
|
||||||
// forceNotify=true (manueller Admin-Test): Pushover wird auch ohne Änderung verschickt.
|
// → geht an alle). forceNotify=true (manueller Admin-Test): Pushover wird auch
|
||||||
async function runDailyCheck(forceNotify = false) {
|
// ohne Änderung verschickt; onlyUserId gesetzt: nur an diesen einen Nutzer.
|
||||||
|
async function runDailyCheck(forceNotify = false, onlyUserId = null) {
|
||||||
try {
|
try {
|
||||||
const { offers } = await scrapeMarktguru(true);
|
const { offers } = await scrapeMarktguru(true);
|
||||||
const currentSig = offerSignature(offers);
|
const currentSig = offerSignature(offers);
|
||||||
@@ -482,10 +490,10 @@ async function runDailyCheck(forceNotify = false) {
|
|||||||
return { changed: false, sent: false, offerCount: offers.length };
|
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 (?, ?)')
|
db.prepare('INSERT OR REPLACE INTO admin_settings (key, value) VALUES (?, ?)')
|
||||||
.run(KOEPI_SETTINGS_KEY, currentSig);
|
.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 });
|
mqttClient.publishKoepiState({ offers, changed });
|
||||||
return { changed, sent: true, offerCount: offers.length };
|
return { changed, sent: true, offerCount: offers.length };
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@@ -514,11 +522,12 @@ router.post('/clear-cache', authenticate, (req, res) => {
|
|||||||
res.json({ ok: true });
|
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) => {
|
router.post('/run-daily-check', authenticate, async (req, res) => {
|
||||||
if (req.user?.role !== 'admin') return res.status(403).json({ error: 'Kein Zugriff' });
|
if (req.user?.role !== 'admin') return res.status(403).json({ error: 'Kein Zugriff' });
|
||||||
try {
|
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 });
|
if (result.error) return res.status(500).json({ error: result.error });
|
||||||
res.json(result);
|
res.json(result);
|
||||||
} catch(e) { res.status(500).json({ error: e.message }); }
|
} catch(e) { res.status(500).json({ error: e.message }); }
|
||||||
|
|||||||
Reference in New Issue
Block a user