/** * Fehlerklasse der Aufträge-Module und einheitliche Fehlerantwort der Routen. * AuftragError nur für Fälle, die ein Nutzer verstehen soll (404, 409, 400 bei zu langem Text); Programmfehler * (ungültige Kennungen oder Typen) sind TypeError und enden als 500. */ import { InvoiceError } from '../finance/stripeFinance.js' export class AuftragError extends Error { constructor(status, message) { if (!Number.isInteger(status) || status < 400 || status > 599) { throw new TypeError('AuftragError: Status muss eine ganze Zahl von 400 bis 599 sein.') } super(message) this.name = 'AuftragError' this.status = status } } /** * Antwortet auf einen Fehler: AuftragError und InvoiceError mit Status und Meldung, alles andere (auch Fehler mit * Status von Appwrite oder Stripe) als 500 „Interner Fehler.“. Das Protokoll nennt nie die Meldung, nur die Art. * InvoiceError wird nur in der Funktion benutzt, nie beim Laden: stripeFinance.js importiert ab L2 selbst Module * dieses Verzeichnisses, so bleibt der Importzyklus harmlos. */ export function sendeFehler(res, was, err) { if (err instanceof AuftragError || err instanceof InvoiceError) { return res.status(err.status).json({ error: err.message }) } console.error(`[auftraege] ${was} fehlgeschlagen:`, err?.type || err?.name || 'Error', err?.status ?? err?.statusCode ?? '', err?.code ?? '') return res.status(500).json({ error: 'Interner Fehler.' }) }