Build & Deploy / deploy (push) Waiting to run
- Absturzsicherheit: Express 4 faengt Fehler aus async-Handlern nicht ab, eine einzige fehlerhafte Anfrage konnte den ganzen Shop beenden - besonders heikel bei capture-order, wo das direkt nach der PayPal-Abbuchung passieren wuerde. Neu: lib/async-wrap.js um alle Handler, zentraler Fehler-Handler in index.js, .catch(next) in der Zugangsschranke, unhandledRejection/uncaughtException-Netz. - Fehlerhaftes JSON lieferte bisher Express' HTML-Fehlerseite mit komplettem Stacktrace und Serverpfaden (weil NODE_ENV nicht gesetzt war). Jetzt saubere JSON-Antwort, NODE_ENV=production in .env.example ergaenzt. - Sicherheits-Header und x-powered-by wie bei der DogFather-Seite. - Falsche Domain .de statt .com korrigiert: astro.config.mjs (betraf alle Canonical-URLs und die komplette Sitemap), robots.txt, Layout.astro sowie den Verwaltungs-Link in jeder Bestellbenachrichtigung (war ein toter Link). - Fehlende Uebersetzung nav.cart in EN/CH/FR ergaenzt: das Warenkorb-Symbol hatte in drei von vier Sprachen keinen Namen fuer Screenreader.
33 lines
1.4 KiB
JavaScript
33 lines
1.4 KiB
JavaScript
/* =====================================================================
|
|
routes/orders.js — POST /api/orders, legt eine Überweisungs-Bestellung (Vorkasse) an.
|
|
1:1 portiert aus functions/api/orders.js. Lehnt zahlungsart:"paypal" bewusst ab (Betrugsschutz
|
|
— PayPal-Bestellungen entstehen NUR über routes/paypal.js, nach echter Zahlungsprüfung).
|
|
===================================================================== */
|
|
|
|
import { Router } from "express";
|
|
import { wrap } from "../lib/async-wrap.js";
|
|
import { erstelleBestellung } from "../lib/bestellung-erstellen.js";
|
|
|
|
export const ordersRouter = Router();
|
|
|
|
ordersRouter.post("/api/orders", wrap(async (req, res) => {
|
|
const body = req.body || {};
|
|
const zahlungsart = String(body.zahlungsart || "");
|
|
|
|
if (zahlungsart === "paypal") {
|
|
return res.status(400).json({
|
|
ok: false,
|
|
error: "PayPal-Bestellungen laufen über den PayPal-Button im Checkout, nicht über diese Route.",
|
|
});
|
|
}
|
|
if (zahlungsart !== "ueberweisung") {
|
|
return res.status(400).json({ ok: false, error: "Ungültige oder nicht unterstützte Zahlungsart." });
|
|
}
|
|
|
|
const ergebnis = await erstelleBestellung(body, { status: "zahlungOffen" });
|
|
if (!ergebnis.ok) {
|
|
return res.status(ergebnis.httpStatus || 500).json({ ok: false, error: ergebnis.error });
|
|
}
|
|
return res.status(201).json({ ok: true, id: ergebnis.id, bestellnummer: ergebnis.bestellnummer });
|
|
}));
|