32 lines
1.4 KiB
JavaScript
32 lines
1.4 KiB
JavaScript
/**
|
|
* 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.' })
|
|
}
|