diff --git a/functions/api/orders.js b/functions/api/orders.js index c0ea0e9..9b422bd 100644 --- a/functions/api/orders.js +++ b/functions/api/orders.js @@ -180,19 +180,21 @@ export async function onRequestPost(context) { ); await env.DB.batch(itemStmts); - // E-Mail-Benachrichtigung an VanVan/qciga — bewusst NICHT abgewartet (context.waitUntil - // lässt den Versand im Hintergrund fertig laufen, ohne die Antwort an die Kundschaft zu - // verzögern) und bewusst NICHT fehlerkritisch: schlägt der Versand fehl (z.B. weil noch kein - // RESEND_API_KEY hinterlegt ist), bleibt die Bestellung trotzdem ganz normal gespeichert und - // in /verwaltung/ sichtbar — nur die Benachrichtigung fehlt dann eben. - context.waitUntil( - sendeEmail(env, { - to: BENACHRICHTIGUNGS_EMAIL, - subject: `🩵 Neue Bestellung ${bestellnummer}`, - 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/`, - }) - ); + // E-Mail-Benachrichtigung an VanVan/qciga — wird bewusst ABGEWARTET (nicht per + // context.waitUntil im Hintergrund verschickt): ein Test am 03.08.2026 hat gezeigt, dass + // waitUntil() in dieser Pages-Functions-Umgebung nicht zuverlässig zu Ende lief, bevor die + // Anfrage beendet wurde (die Bestellung wurde gespeichert, aber die E-Mail kam nie an). Die + // paar hundert Millisekunden zusätzliche Wartezeit beim Abschicken der Bestellung sind ein + // kleiner Preis für "die E-Mail kommt garantiert an". Trotzdem weiterhin NICHT + // 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, + subject: `🩵 Neue Bestellung ${bestellnummer}`, + 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/`, + }); return json(201, { ok: true, id: orderId, bestellnummer }); } catch (err) { diff --git a/public/admin/config.yml b/public/admin/config.yml index f80510f..aba0b05 100644 --- a/public/admin/config.yml +++ b/public/admin/config.yml @@ -50,6 +50,11 @@ collections: - { label: Englisch, name: en, widget: text } - { label: "Schweizerdeutsch", name: ch, 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 name: kategorie widget: relation @@ -118,11 +123,6 @@ collections: - { 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: "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: Material, name: material, widget: string, required: false } - { label: "Größe / Maße", name: groesse, widget: string, required: false }