Hinweis 03-2: Repository mit localStorage
Stufe 1 zuerst lesen, dann selbst probieren. Die nächste Stufe erst, wenn du nach zwei Versuchen feststeckst.
Stufe 1: Denkfrage
localStorage kann nur Text speichern, keine Objekte. Wie wird aus einem Array von Leads
ein Text und zurück? Und: Wenn zwei Firmen dieselbe App im selben Browser nutzen, wie
hältst du ihre Daten auseinander?
Stufe 2: Teilbeispiel
function storageKey(workspaceId: string): string {
return `lead-cockpit:${workspaceId}:leads`;
}
function readAll(storage: Storage, workspaceId: string): readonly Lead[] {
const raw = storage.getItem(storageKey(workspaceId));
return raw === null ? [] : (JSON.parse(raw) as Lead[]);
}
function writeAll(storage: Storage, workspaceId: string, leads: readonly Lead[]): void {
storage.setItem(storageKey(workspaceId), JSON.stringify(leads));
}
Stufe 3: Konkrete Erklärung
Mit readAll und writeAll sind die vier Methoden je zwei bis drei Zeilen:
list:[...readAll(...)](die Kopie ist Pflicht, Test C02-M3-01).get:readAll(...).find((lead) => lead.id === id).save: alle lesen, den mit gleicher ID herausfiltern, den neuen anhängen, schreiben.remove: alle lesen, filtern, schreiben.
Schau dir createInMemoryRepository im selben File an: Es ist dieselbe Logik, nur mit
einer Variablen statt storage. Wenn JSON.parse bei kaputtem Inhalt wirft, fang es mit
try ab und gib [] zurück; das ist robuster, aber kein Test verlangt es.