Kundenansicht P6: Abo-Ende-Abgleich im Tagesjob
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
7a03f073bc
commit
db47f13510
3 files changed
+94
No files matched your search
@@ -33,6 +33,7 @@ import { purgeViewLog } from './services/customerViewLog.js'
|
||||
import { purgeUnclaimedNewsImages } from './services/newsImages.js'
|
||||
import { runActivation } from './services/siteFeatures.js'
|
||||
import { runAboCheck, runAnalyseReconcile } from './services/analyse.js'
|
||||
import { aboFunktionenTagesJob } from './services/aboFunktionenAbgleich.js'
|
||||
import { fuenfMinutenJob, minutenJob, tagesbericht, taeglicherJob } from './services/termine/jobs.js'
|
||||
import { minutenJob as unterkunftMinutenJob, viertelstundenJob as unterkunftViertelstundenJob, taeglicherJob as unterkunftTaeglicherJob } from './services/unterkunft/jobs.js'
|
||||
import { minutenJob as shopMinutenJob, stuendlicherJob as shopStuendlicherJob, taeglicherJob as shopTaeglicherJob } from './services/shop/jobs.js'
|
||||
@@ -243,6 +244,21 @@ const server = app.listen(config.port, '0.0.0.0', () => {
|
||||
setTimeout(analyseAboCheck, 2 * 60 * 1000).unref()
|
||||
setInterval(analyseAboCheck, 24 * 60 * 60 * 1000).unref()
|
||||
|
||||
// Funktionen des Abo-Modells (Kundenansicht neu, P6): taeglich der Abo-Ende-Abgleich fuer News, Terminplaner, Webshop und
|
||||
// Buchungskalender (150 Sekunden nach dem Start beginnend, VOR dem Terminplaner-Tagesjob bei 180 s und den Loeschjobs von Shop
|
||||
// und Buchungskalender, damit ein zurueckgekehrtes Abo nicht mehr geloescht wird). Laeuft unabhaengig von den Funktionsschaltern: ohne
|
||||
// Dokumente des Abo-Modells kostet er eine Abfrage. Ein noch laufender Lauf wird nicht ueberlappt; im Log stehen keine Kundendaten.
|
||||
const aboFunktionenAbgleich = () =>
|
||||
aboFunktionenTagesJob(new Date())
|
||||
.then((r) => {
|
||||
if (r.abgeschaltet || r.wiederEin || r.geloescht || r.mails || r.fehler) {
|
||||
console.log(`[funktionen-abo] ${r.abgeschaltet ?? 0} abgeschaltet, ${r.wiederEin ?? 0} wieder eingeschaltet, ${r.geloescht ?? 0} gelöscht, ${r.mails ?? 0} Mail(s), ${r.fehler ?? 0} Fehler`)
|
||||
}
|
||||
})
|
||||
.catch((err) => console.warn('[funktionen-abo] Abgleich fehlgeschlagen:', err.message))
|
||||
setTimeout(aboFunktionenAbgleich, 150 * 1000).unref()
|
||||
setInterval(aboFunktionenAbgleich, 24 * 60 * 60 * 1000).unref()
|
||||
|
||||
// Terminplaner (Modus off: jeder Lauf kehrt sofort zurueck, ohne Abfrage; ein noch laufender Job wird nicht ueberlappt):
|
||||
// jede Minute abgelaufene Haltungen verfallen lassen und die Mail-Warteschlange senden, alle 5 Minuten Erinnerungen, erledigte
|
||||
// Termine und vergangene Anfragen, taeglich (3 Minuten nach dem Start beginnend) Loeschfristen und Aufraeumen. Die Jobs melden
|
||||
|
||||
@@ -299,3 +299,25 @@ export async function gleicheAboFunktionenAb(now = new Date()) {
|
||||
}
|
||||
return erg
|
||||
}
|
||||
|
||||
let tagesJobLaeuft = false
|
||||
|
||||
/**
|
||||
* Tagesjob (server/index.js): der Abo-Ende-Abgleich ohne Ueberlappung. Laeuft noch ein Lauf (Merker im Speicher des Prozesses, im finally
|
||||
* geloescht), kehrt der Aufruf sofort mit { uebersprungen: true } zurueck. Wirft nie: ein unerwarteter Fehler steht im Log, das Ergebnis
|
||||
* ist { fehler: 1 }. Das Log nennt weder Namen noch Adressen.
|
||||
* @param {Date} [now]
|
||||
* @returns {Promise<ReturnType<typeof gleicheAboFunktionenAb> | { uebersprungen: true } | { fehler: 1 }>}
|
||||
*/
|
||||
export async function aboFunktionenTagesJob(now = new Date()) {
|
||||
if (tagesJobLaeuft) return { uebersprungen: true }
|
||||
tagesJobLaeuft = true
|
||||
try {
|
||||
return await gleicheAboFunktionenAb(now)
|
||||
} catch (err) {
|
||||
console.error(`[abo-funktionen] Tagesjob fehlgeschlagen: ${fehlerText(err)}`)
|
||||
return { fehler: 1 }
|
||||
} finally {
|
||||
tagesJobLaeuft = false
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user