79 lines
2.1 KiB
JavaScript
79 lines
2.1 KiB
JavaScript
/**
|
||
* 🌟 MUSTERLÖSUNG: JS 08 – FEHLERBEHANDLUNG & DEBUGGING 🌟
|
||
* =======================================================
|
||
*/
|
||
|
||
class AnwendungsFehler extends Error {
|
||
constructor(message) {
|
||
super(message);
|
||
this.name = "AnwendungsFehler";
|
||
}
|
||
}
|
||
|
||
class ValidierungsFehler extends AnwendungsFehler {
|
||
constructor(message, feld = null) {
|
||
super(message);
|
||
this.name = "ValidierungsFehler";
|
||
this.feld = feld;
|
||
}
|
||
}
|
||
|
||
class GuthabenFehler extends AnwendungsFehler {
|
||
constructor(message, saldo = 0, betrag = 0) {
|
||
super(message);
|
||
this.name = "GuthabenFehler";
|
||
this.saldo = saldo;
|
||
this.betrag = betrag;
|
||
}
|
||
}
|
||
|
||
function sichereDivision(a, b) {
|
||
if (typeof a !== "number" || typeof b !== "number" || isNaN(a) || isNaN(b)) {
|
||
throw new ValidierungsFehler("Ungültige Zahlenwerte für Division.", "parameter");
|
||
}
|
||
if (b === 0) {
|
||
throw new AnwendungsFehler("Division durch Null ist nicht erlaubt.");
|
||
}
|
||
return a / b;
|
||
}
|
||
|
||
function parseBenutzerJson(jsonString) {
|
||
if (!jsonString || typeof jsonString !== "string") {
|
||
throw new ValidierungsFehler("JSON-String darf nicht leer sein.", "jsonString");
|
||
}
|
||
|
||
let parsed;
|
||
try {
|
||
parsed = JSON.parse(jsonString);
|
||
} catch (err) {
|
||
throw new ValidierungsFehler("Ungültiges JSON-Format: " + err.message, "jsonString");
|
||
}
|
||
|
||
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
||
throw new ValidierungsFehler("JSON muss ein Objekt darstellen.", "root");
|
||
}
|
||
|
||
if (!parsed.name || typeof parsed.name !== "string" || parsed.name.trim() === "") {
|
||
throw new ValidierungsFehler("Pflichtfeld 'name' fehlt oder ist ungültig.", "name");
|
||
}
|
||
|
||
return parsed;
|
||
}
|
||
|
||
function pruefeTransaktion(kontoSaldo, abhebeBetrag) {
|
||
if (
|
||
typeof kontoSaldo !== "number" ||
|
||
typeof abhebeBetrag !== "number" ||
|
||
isNaN(kontoSaldo) ||
|
||
isNaN(abhebeBetrag) ||
|
||
abhebeBetrag <= 0
|
||
) {
|
||
throw new ValidierungsFehler("Ungültiger Abhebebetrag.", "abhebeBetrag");
|
||
}
|
||
|
||
if (kontoSaldo < abhebeBetrag) {
|
||
throw new GuthabenFehler("Nicht genügend Guthaben vorhanden.", kontoSaldo, abhebeBetrag);
|
||
}
|
||
|
||
return kontoSaldo - abhebeBetrag;
|
||
}
|