Hinweis 03-1: Validierung
Stufe 1: Denkfrage
validateLead bekommt ein Objekt, bei dem jedes Feld fehlen kann (Partial<Lead>). Was
ist der Unterschied zwischen "Feld fehlt", "Feld ist leer" und "Feld besteht nur aus
Leerzeichen"? Welche davon sollen alle gleich behandelt werden?
Stufe 2: Teilbeispiel
Eine kleine Hilfsfunktion pro Regel macht den Code lesbar:
function isBlank(value: string | undefined): boolean {
return (value ?? "").trim().length === 0;
}
Dann sammelst du Fehler in einem Objekt und entscheidest am Ende:
const errors: Record<string, string> = {};
if (isBlank(input.company)) errors["company"] = "Firma ist ein Pflichtfeld";
// weitere Regeln
return Object.keys(errors).length === 0 ? VALID : { ok: false, errors };
Stufe 3: Konkrete Erklärung
Die fünf Regeln: Firma und Kontaktname nicht leer; E-Mail hat ein "@" an einer Stelle
grösser als 0 und danach noch einen "."; Status ist einer aus LEAD_STATUSES (dafür gibt
es isLeadStatus); nextFollowUp ist null, undefined oder passt zu /^\d{4}-\d{2}-\d{2}$/.
Für die E-Mail reicht const at = email.indexOf("@"); at > 0 && email.indexOf(".", at) > at + 1.
Die Meldungen sind für Menschen: "E-Mail ist ungültig", nicht "regex failed". Wenn das
stimmt, wird Kriterium C02-M3-05 von allein grün, weil loadSeedLeads deine Funktion nutzt.