import m from "mithril" /** * Datenmodell für eine Projekt-User-Zuordnung (Sichtbarkeit). * * Die Felder id, projekt_id und user_id sind die ORM-Spalten der * Verknüpfungstabelle 'projekt_users'. Die Felder userid, username und * email werden serverseitig aus der Auth-Datenbank aufgelöst und im JSON * ergänzt. */ export interface iProjektUser { id: number projekt_id: number user_id: number userid: string username: string email: string } /** * Erweitertes Interface für die Übersichtssicht "Nutzer-Zugriffe". * Enthält zusätzlich den Projektnamen, der serverseitig aus der * Projekt-Relationship aufgelöst wird. */ export interface iProjektUserWithProjekt extends iProjektUser { projektname: string } /* ------------------------------------------------------------------ */ /* REST-API-Aufrufe (Client-Seite) */ /* ------------------------------------------------------------------ */ /* Die folgenden Funktionen kapseln die Kommunikation mit den */ /* serverseitigen REST-Endpunkten (/xhr/projektuser/*). */ /* ------------------------------------------------------------------ */ /** * Basis-Pfad der ProjektUser-REST-Endpunkte. */ const PROJEKTUSER_REST_BASE = "/xhr/projektuser" /** * Lädt die Liste der einem Projekt zugeordneten Nutzer vom Server. */ export function fetchProjektUsers(projektId: number): Promise { return m.request({ method: "GET", url: PROJEKTUSER_REST_BASE + "/list", params: {projekt_id: projektId} }).then((result) => result as iProjektUser[]) } /** * Ordnet einen Nutzer einem Projekt zu. */ export function addProjektUserREST(projektId: number, userId: number): Promise { return m.request({ method: "POST", url: PROJEKTUSER_REST_BASE + "/add", body: {projekt_id: projektId, user_id: userId} }).then(() => undefined) } /** * Entfernt die Zuordnung eines Nutzers zu einem Projekt. */ export function removeProjektUserREST(projektId: number, userId: number): Promise { return m.request({ method: "DELETE", url: PROJEKTUSER_REST_BASE + "/remove", params: {projekt_id: projektId, user_id: userId} }).then(() => undefined) } /** * Lädt alle Projekt-User-Zuordnungen inkl. projektname und Nutzerdaten. * Nur für AppAdmin/SysAdmin. */ export function fetchAllProjektUsers(): Promise { return m.request({ method: "GET", url: PROJEKTUSER_REST_BASE + "/listall" }).then((result) => result as iProjektUserWithProjekt[]) }