Shop E2: Abschluss (schliesseAb), verwirf, Abgleich offener Bestellungen, Minutenjob
schliesseAb ist die einzige Stelle fuer den Status bezahlt: Sperre je Bestellung, Konto muss zum Shop passen, idempotent, spaete Zahlung nach Ablauf wird angenommen, SEPA erst bei bezahlt, Bestandsabzug mit Ueberverkauft-Hinweis, G09 an den Kaeufer und K25 an den Haendler (Mailfehler machen nichts rueckgaengig). pruefeOffene und jobs.js minutenJob gleichen offene Bestellungen mit Stripe ab. fakeStripe: completeSession. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
9de23c7fe2
commit
bf99f659eb
4 files changed
+741
-4
No files matched your search
@@ -0,0 +1,31 @@
|
||||
import { pruefeOffene } from './bestellungen.js'
|
||||
import { shopModus } from './schalter.js'
|
||||
|
||||
/**
|
||||
* Jobs des Webshops (Plan 2026-10-05-webshop.md, E2; J3 ergaenzt den Tagesjob und die Registrierung in index.js).
|
||||
* Jeder Job laeuft hoechstens einmal gleichzeitig (ein Lauf, der noch haengt, ueberspringt den naechsten Takt) und wirft nie.
|
||||
*/
|
||||
|
||||
const laufend = new Set()
|
||||
|
||||
async function einzeln(name, arbeit) {
|
||||
if (laufend.has(name)) {
|
||||
console.warn(`[shop-jobs] ${name}: der vorige Lauf ist noch nicht fertig, dieser Takt wird übersprungen`)
|
||||
return { uebersprungen: true }
|
||||
}
|
||||
laufend.add(name)
|
||||
try {
|
||||
return await arbeit()
|
||||
} catch (err) {
|
||||
console.error(`[shop-jobs] ${name} fehlgeschlagen: ${err?.name}: ${String(err?.message).slice(0, 200)}`)
|
||||
return { fehler: true }
|
||||
} finally {
|
||||
laufend.delete(name)
|
||||
}
|
||||
}
|
||||
|
||||
/** Minutenjob: offene Bestellungen mit verstrichener Frist bei Stripe abgleichen (bezahlt abschliessen oder verwerfen). Bei SHOP_ENABLED=off aus. */
|
||||
export async function minutenJob(now = new Date()) {
|
||||
if (shopModus() === 'off') return { aus: true }
|
||||
return einzeln('minutenJob', () => pruefeOffene(now))
|
||||
}
|
||||
Reference in new issue
Block a user