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. */ export interface iProjekt { id: number kunden_id: number kunden_name: string projektname: string zweck: string verantwortlicher: string startdatum: string } /* ------------------------------------------------------------------ */ /* 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. */ export function fetchProjekte(): Promise { return m.request({ method: "GET", url: PROJEKT_REST_BASE + "/list" }).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) }