import m from "mithril" /** * Datenmodell für eine Kontaktadresse (Akquise-Ziel innerhalb eines Projekts). * Jede Kontaktadresse ist genau einem Projekt zugeordnet (FK projektId). */ export interface iKontaktadresse { id: number projektId: number projektName: string anrede: string name: string firma: string telefon: string email: string strasse: string plz: string ort: string land: string notiz: string } /** * In-Memory-Datenspeicher für Kontaktadressen. Wird als Fallback solange verwendet, * bis die serverseitigen REST-Endpunkte verfügbar sind. */ export const kontaktadresseDaten: iKontaktadresse[] = [ {id: 1, projektId: 1, projektName: "Website-Relaunch", anrede: "Herr", name: "Thomas Becker", firma: "Becker Webdesign GmbH", telefon: "+49 201 123456", email: "t.becker@becker-webdesign.de", strasse: "Industriestr. 12", plz: "45131", ort: "Essen", land: "Deutschland", notiz: "Interessent für Website-Relaunch, Erstkontakt auf Messe."}, {id: 2, projektId: 1, projektName: "Website-Relaunch", anrede: "Frau", name: "Sandra Klein", firma: "Klein Marketing", telefon: "+49 211 987654", email: "s.klein@klein-marketing.de", strasse: "Königsallee 5", plz: "40212", ort: "Düsseldorf", land: "Deutschland", notiz: ""}, {id: 3, projektId: 2, projektName: "E-Commerce Plattform", anrede: "Herr", name: "Michael Wagner", firma: "Wagner Online Shop", telefon: "+49 221 555123", email: "m.wagner@wagner-shop.de", strasse: "Hauptstr. 88", plz: "50667", ort: "Köln", land: "Deutschland", notiz: "Sucht E-Commerce-Lösung, Budget geklärt."}, {id: 4, projektId: 3, projektName: "CRM-System", anrede: "Frau", name: "Julia Hoffmann", firma: "Hoffmann Consulting", telefon: "+49 89 444333", email: "j.hoffmann@hoffmann-consulting.de", strasse: "Marienplatz 3", plz: "80331", ort: "München", land: "Deutschland", notiz: "Wiedervorlage im nächsten Quartal."} ] /** * Liefert die nächste freie Kontaktadressen-ID auf Basis des In-Memory-Speichers. * Sobald die serverseitige ID-Vergabe verfügbar ist, entfällt diese Funktion. */ export function getNewKontaktadresseId(): number { if (kontaktadresseDaten.length === 0) { return 1 } return Math.max(...kontaktadresseDaten.map((ka: iKontaktadresse) => ka.id)) + 1 } /** * Fügt eine neue Kontaktadresse dem In-Memory-Speicher hinzu. */ export function addKontaktadresse(kontaktadresse: iKontaktadresse): void { kontaktadresseDaten.push(kontaktadresse) } /** * Aktualisiert eine bestehende Kontaktadresse im In-Memory-Speicher. */ export function updateKontaktadresse(kontaktadresse: iKontaktadresse): void { const index = kontaktadresseDaten.findIndex((k: iKontaktadresse) => k.id === kontaktadresse.id) if (index !== -1) { kontaktadresseDaten[index] = kontaktadresse } } /** * Liefert eine Kopie aller Kontaktadressen aus dem In-Memory-Speicher. */ export function getKontaktadressen(): iKontaktadresse[] { return [...kontaktadresseDaten] } /** * Liefert die Kontaktadressen eines bestimmten Projekts. Ist projektId null, * werden alle Kontaktadressen zurückgegeben. */ export function getKontaktadressenByProjektId(projektId: number | null): iKontaktadresse[] { return projektId ? kontaktadresseDaten.filter((k: iKontaktadresse) => k.projektId === projektId) : [...kontaktadresseDaten] } /** * Liefert eine einzelne Kontaktadresse anhand ihrer ID oder undefined. */ export function getKontaktadresseById(id: number): iKontaktadresse | undefined { return kontaktadresseDaten.find((k: iKontaktadresse) => 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 Kontaktadressen-REST-Endpunkte. */ const KONTAKTADRESSE_REST_BASE = "/xhr/kontaktadresse" /** * Lädt die Kontaktadressenliste vom Server. */ export function fetchKontaktadressen(): Promise { return m.request({ method: "GET", url: KONTAKTADRESSE_REST_BASE + "/list" }).then((result) => result as iKontaktadresse[]) } /** * Lädt eine einzelne Kontaktadresse anhand ihrer ID vom Server. */ export function fetchKontaktadresseById(id: number): Promise { return m.request({ method: "GET", url: KONTAKTADRESSE_REST_BASE + "/get", params: {id: id} }).then((result) => result as iKontaktadresse) } /** * Legt eine neue Kontaktadresse serverseitig an. */ export function createKontaktadresseREST(kontaktadresse: iKontaktadresse): Promise { return m.request({ method: "POST", url: KONTAKTADRESSE_REST_BASE + "/create", body: kontaktadresse }).then((result) => result as iKontaktadresse) } /** * Aktualisiert eine bestehende Kontaktadresse serverseitig. */ export function updateKontaktadresseREST(kontaktadresse: iKontaktadresse): Promise { return m.request({ method: "PUT", url: KONTAKTADRESSE_REST_BASE + "/update", body: kontaktadresse }).then((result) => result as iKontaktadresse) } /** * Löscht eine Kontaktadresse serverseitig anhand ihrer ID. */ export function deleteKontaktadresseREST(id: number): Promise { return m.request({ method: "DELETE", url: KONTAKTADRESSE_REST_BASE + "/delete", params: {id: id} }).then(() => undefined) }