Fix: Bestell-E-Mail wird jetzt zuverlässig verschickt (await statt waitUntil)
context.waitUntil() lief in dieser Pages-Functions-Umgebung nicht zuverlässig zu Ende, bevor die Anfrage beendet wurde - Bestellungen wurden korrekt gespeichert, aber die Benachrichtigungs-Mail an [email protected] kam nie an. Mit echten Live-Bestellungen verifiziert: mit waitUntil kam nichts bei Resend an, mit await kam die Mail sofort und zuverlässig an. Außerdem: "Auf Lager"-Feld im Produkt-Formular (Admin) steht jetzt über "Kategorie" statt darunter, wie gewünscht. Co-Authored-By: Claude Sonnet 5 <[email protected]>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
989006b6a6
commit
5df0643a9d
+11
-9
@@ -180,19 +180,21 @@ export async function onRequestPost(context) {
|
|||||||
);
|
);
|
||||||
await env.DB.batch(itemStmts);
|
await env.DB.batch(itemStmts);
|
||||||
|
|
||||||
// E-Mail-Benachrichtigung an VanVan/qciga — bewusst NICHT abgewartet (context.waitUntil
|
// E-Mail-Benachrichtigung an VanVan/qciga — wird bewusst ABGEWARTET (nicht per
|
||||||
// lässt den Versand im Hintergrund fertig laufen, ohne die Antwort an die Kundschaft zu
|
// context.waitUntil im Hintergrund verschickt): ein Test am 03.08.2026 hat gezeigt, dass
|
||||||
// verzögern) und bewusst NICHT fehlerkritisch: schlägt der Versand fehl (z.B. weil noch kein
|
// waitUntil() in dieser Pages-Functions-Umgebung nicht zuverlässig zu Ende lief, bevor die
|
||||||
// RESEND_API_KEY hinterlegt ist), bleibt die Bestellung trotzdem ganz normal gespeichert und
|
// Anfrage beendet wurde (die Bestellung wurde gespeichert, aber die E-Mail kam nie an). Die
|
||||||
// in /verwaltung/ sichtbar — nur die Benachrichtigung fehlt dann eben.
|
// paar hundert Millisekunden zusätzliche Wartezeit beim Abschicken der Bestellung sind ein
|
||||||
context.waitUntil(
|
// kleiner Preis für "die E-Mail kommt garantiert an". Trotzdem weiterhin NICHT
|
||||||
sendeEmail(env, {
|
// fehlerkritisch: sendeEmail() wirft nie einen Fehler, schlägt der Versand fehl (z.B. weil
|
||||||
|
// kein RESEND_API_KEY hinterlegt ist), bleibt die Bestellung trotzdem ganz normal gespeichert
|
||||||
|
// und in /verwaltung/ sichtbar — nur die Benachrichtigung fehlt dann eben.
|
||||||
|
await sendeEmail(env, {
|
||||||
to: BENACHRICHTIGUNGS_EMAIL,
|
to: BENACHRICHTIGUNGS_EMAIL,
|
||||||
subject: `🩵 Neue Bestellung ${bestellnummer}`,
|
subject: `🩵 Neue Bestellung ${bestellnummer}`,
|
||||||
html: bestellBenachrichtigungHtml({ bestellnummer, name, email, land, artikel, summe }),
|
html: bestellBenachrichtigungHtml({ bestellnummer, name, email, land, artikel, summe }),
|
||||||
text: `Neue Bestellung ${bestellnummer} von ${name} (${email}), ${artikel.length} Artikel, Summe ${formatPreis(summe)}. Details: https://vans-diy-bastelbedarf.pages.dev/verwaltung/`,
|
text: `Neue Bestellung ${bestellnummer} von ${name} (${email}), ${artikel.length} Artikel, Summe ${formatPreis(summe)}. Details: https://vans-diy-bastelbedarf.pages.dev/verwaltung/`,
|
||||||
})
|
});
|
||||||
);
|
|
||||||
|
|
||||||
return json(201, { ok: true, id: orderId, bestellnummer });
|
return json(201, { ok: true, id: orderId, bestellnummer });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|||||||
@@ -50,6 +50,11 @@ collections:
|
|||||||
- { label: Englisch, name: en, widget: text }
|
- { label: Englisch, name: en, widget: text }
|
||||||
- { label: "Schweizerdeutsch", name: ch, widget: text }
|
- { label: "Schweizerdeutsch", name: ch, widget: text }
|
||||||
- { label: Französisch, name: fr, widget: text }
|
- { label: Französisch, name: fr, widget: text }
|
||||||
|
- label: "Auf Lager"
|
||||||
|
name: bestand
|
||||||
|
widget: number
|
||||||
|
value_type: int
|
||||||
|
hint: "Wie viele Stück hast du vorrätig? 0 = ausverkauft (Artikel bleibt trotzdem sichtbar)."
|
||||||
- label: Kategorie
|
- label: Kategorie
|
||||||
name: kategorie
|
name: kategorie
|
||||||
widget: relation
|
widget: relation
|
||||||
@@ -118,11 +123,6 @@ collections:
|
|||||||
- { label: "Österreich (€)", name: at, widget: number, value_type: float, step: 0.01, required: false }
|
- { label: "Österreich (€)", name: at, widget: number, value_type: float, step: 0.01, required: false }
|
||||||
- { label: "Schweiz (€)", name: ch, widget: number, value_type: float, step: 0.01, required: false }
|
- { label: "Schweiz (€)", name: ch, widget: number, value_type: float, step: 0.01, required: false }
|
||||||
- { label: "Luxemburg (€)", name: lu, widget: number, value_type: float, step: 0.01, required: false }
|
- { label: "Luxemburg (€)", name: lu, widget: number, value_type: float, step: 0.01, required: false }
|
||||||
- label: "Auf Lager"
|
|
||||||
name: bestand
|
|
||||||
widget: number
|
|
||||||
value_type: int
|
|
||||||
hint: "Wie viele Stück hast du vorrätig? 0 = ausverkauft (Artikel bleibt trotzdem sichtbar)."
|
|
||||||
- { label: Artikelnummer, name: artikelnummer, widget: string, required: false }
|
- { label: Artikelnummer, name: artikelnummer, widget: string, required: false }
|
||||||
- { label: Material, name: material, widget: string, required: false }
|
- { label: Material, name: material, widget: string, required: false }
|
||||||
- { label: "Größe / Maße", name: groesse, widget: string, required: false }
|
- { label: "Größe / Maße", name: groesse, widget: string, required: false }
|
||||||
|
|||||||
Reference in New Issue
Block a user