import m from "mithril" /** * Datenmodell für einen Kontakt (Ansprechpartner beim Kunden). * Jeder Kontakt ist genau einem Kunden zugeordnet (FK kundenId). */ export interface iKontakt { id: number kundenId: number kundenName: string anrede: string name: string position: string telefon: string email: string notiz: string } /** * In-Memory-Datenspeicher für Kontakte. Wird als Fallback solange verwendet, * bis die serverseitigen REST-Endpunkte verfügbar sind. */ export const kontaktDaten: iKontakt[] = [ {id: 1, kundenId: 1, kundenName: "Musterfirma GmbH", anrede: "Herr", name: "Max Mustermann", position: "Geschäftsführer", telefon: "+49 123 45678", email: "m.mustermann@musterfirma.de", notiz: "Erster Ansprechpartner für das Website-Projekt."}, {id: 2, kundenId: 1, kundenName: "Musterfirma GmbH", anrede: "Frau", name: "Anna Schmidt", position: "Marketingleiterin", telefon: "+49 123 45679", email: "a.schmidt@musterfirma.de", notiz: "Zuständig für Design-Fragen."}, {id: 3, kundenId: 2, kundenName: "Beispiel AG", anrede: "Herr", name: "Peter Müller", position: "IT-Leiter", telefon: "+49 543 21012", email: "p.mueller@beispiel-ag.de", notiz: "Technischer Ansprechpartner."}, {id: 4, kundenId: 3, kundenName: "Test Unternehmen", anrede: "Frau", name: "Lisa Bauer", position: "Projektmanagerin", telefon: "+49 678 90123", email: "l.bauer@test-unternehmen.com", notiz: ""} ] /** * Liefert die nächste freie Kontakt-ID auf Basis des In-Memory-Speichers. * Sobald die serverseitige ID-Vergabe verfügbar ist, entfällt diese Funktion. */ export function getNewKontaktId(): number { if (kontaktDaten.length === 0) { return 1 } return Math.max(...kontaktDaten.map((kontakt: iKontakt) => kontakt.id)) + 1 } /** * Fügt einen neuen Kontakt dem In-Memory-Speicher hinzu. */ export function addKontakt(kontakt: iKontakt): void { kontaktDaten.push(kontakt) } /** * Aktualisiert einen bestehenden Kontakt im In-Memory-Speicher. */ export function updateKontakt(kontakt: iKontakt): void { const index = kontaktDaten.findIndex((k: iKontakt) => k.id === kontakt.id) if (index !== -1) { kontaktDaten[index] = kontakt } } /** * Liefert eine Kopie aller Kontakte aus dem In-Memory-Speicher. */ export function getKontakte(): iKontakt[] { return [...kontaktDaten] } /** * Liefert die Kontakte eines bestimmten Kunden. Ist kundenId null, werden * alle Kontakte zurückgegeben. */ export function getKontakteByKundenId(kundenId: number | null): iKontakt[] { return kundenId ? kontaktDaten.filter((k: iKontakt) => k.kundenId === kundenId) : [...kontaktDaten] } /** * Liefert einen einzelnen Kontakt anhand seiner ID oder undefined. */ export function getKontaktById(id: number): iKontakt | undefined { return kontaktDaten.find((k: iKontakt) => k.id === id) } /* ------------------------------------------------------------------ */ /* REST-API-Aufrufe (Client-Seite) */ /* ------------------------------------------------------------------ */ /* Die folgenden Funktionen kapseln die Kommunikation mit den */ /* serverseitigen REST-Endpunkten. Die Endpunkte sind noch nicht */ /* implementiert und werden später nachgereicht. */ /* ------------------------------------------------------------------ */ /** * Basis-Pfad der Kontakt-REST-Endpunkte. */ const KONTAKT_REST_BASE = "/xhr/kontakt" /** * Lädt die Kontaktliste vom Server. */ export function fetchKontakte(): Promise { return m.request({ method: "GET", url: KONTAKT_REST_BASE + "/list" }).then((result) => result as iKontakt[]) } /** * Lädt einen einzelnen Kontakt anhand seiner ID vom Server. */ export function fetchKontaktById(id: number): Promise { return m.request({ method: "GET", url: KONTAKT_REST_BASE + "/get", params: {id: id} }).then((result) => result as iKontakt) } /** * Legt einen neuen Kontakt serverseitig an. */ export function createKontaktREST(kontakt: iKontakt): Promise { return m.request({ method: "POST", url: KONTAKT_REST_BASE + "/create", body: kontakt }).then((result) => result as iKontakt) } /** * Aktualisiert einen bestehenden Kontakt serverseitig. */ export function updateKontaktREST(kontakt: iKontakt): Promise { return m.request({ method: "PUT", url: KONTAKT_REST_BASE + "/update", body: kontakt }).then((result) => result as iKontakt) } /** * Löscht einen Kontakt serverseitig anhand seiner ID. */ export function deleteKontaktREST(id: number): Promise { return m.request({ method: "DELETE", url: KONTAKT_REST_BASE + "/delete", params: {id: id} }).then(() => undefined) }