import m from "mithril" /** * Datenmodell für ein Projekt. * Die Feldnamen entsprechen den serverseitigen ORM-Spalten (snake_case). * kunden_name ist keine ORM-Spalte, sondern wird serverseitig aus der * Kunde-Relationship abgeleitet und im JSON ergänzt. is_erledigt ist * ebenfalls keine Spalte, sondern wird serverseitig dynamisch berechnet: * True, wenn das Projekt Kontaktadressen hat und alle davon erledigt sind. */ export interface iProjekt { id: number kunden_id: number kunden_name: string projektname: string zweck: string verantwortlicher: string startdatum: string /** Dynamisch berechneter Erledigt-Status (keine ORM-Spalte). */ is_erledigt: boolean } /* ------------------------------------------------------------------ */ /* REST-API-Aufrufe (Client-Seite) */ /* ------------------------------------------------------------------ */ /* Die folgenden Funktionen kapseln die Kommunikation mit den */ /* serverseitigen REST-Endpunkten (/xhr/projekt/*). */ /* ------------------------------------------------------------------ */ /** * Basis-Pfad der Projekt-REST-Endpunkte. */ const PROJEKT_REST_BASE = "/xhr/projekt" /** * Lädt die Projektliste vom Server. * Ist kundenId gesetzt (>= 0), werden nur die Projekte dieses Kunden * geliefert (serverseitige Filterung). Ohne Parameter werden alle * Projekte geliefert. */ export function fetchProjekte(kundenId?: number): Promise { const params: Record = {} if (kundenId !== undefined && kundenId >= 0) { params.kunden_id = kundenId } return m.request({ method: "GET", url: PROJEKT_REST_BASE + "/list", params: params }).then((result) => result as iProjekt[]) } /** * Lädt ein einzelnes Projekt anhand seiner ID vom Server. */ export function fetchProjektById(id: number): Promise { return m.request({ method: "GET", url: PROJEKT_REST_BASE + "/get", params: {id: id} }).then((result) => result as iProjekt) } /** * Legt ein neues Projekt serverseitig an. */ export function createProjektREST(projekt: iProjekt): Promise { return m.request({ method: "POST", url: PROJEKT_REST_BASE + "/create", body: projekt }).then((result) => result as iProjekt) } /** * Aktualisiert ein bestehendes Projekt serverseitig. */ export function updateProjektREST(projekt: iProjekt): Promise { return m.request({ method: "PUT", url: PROJEKT_REST_BASE + "/update", body: projekt }).then((result) => result as iProjekt) } /** * Löscht ein Projekt serverseitig anhand seiner ID. */ export function deleteProjektREST(id: number): Promise { return m.request({ method: "DELETE", url: PROJEKT_REST_BASE + "/delete", params: {id: id} }).then(() => undefined) }