sdfsdf
All checks were successful
Deploy / deploy-staging (push) Successful in 24s
Deploy / deploy-production (push) Has been skipped

This commit is contained in:
2026-06-21 01:15:38 +02:00
parent 0d7f0681c2
commit dc9cf350d6
7 changed files with 48 additions and 1 deletions

View File

@@ -38,6 +38,17 @@ Das Startmenue ist in drei Bereiche gegliedert:
- Fenster koennen verschoben, minimiert, maximiert und geschlossen werden. - Fenster koennen verschoben, minimiert, maximiert und geschlossen werden.
- Programme koennen sowohl globale System-Apps als auch klassische Module sein. - Programme koennen sowohl globale System-Apps als auch klassische Module sein.
## API
Die API der Anwendung liegt aktuell bewusst auf demselben Host wie der Desktop.
Das Zielbild ist:
- `desktop.kusche.berlin/api/v1/...`
- `staging.desktop.kusche.berlin/api/v1/...`
Eine getrennte API-Domain wie `api.desktop.kusche.berlin` ist derzeit nicht der Standard.
## Einstellungen oeffnen ## Einstellungen oeffnen
Die Einstellungen werden aktuell ueber die App `User Self Management` bereitgestellt. Die Einstellungen werden aktuell ueber die App `User Self Management` bereitgestellt.

View File

@@ -58,6 +58,9 @@ Diese Benennungen gelten projektweit und sollen in UI, Doku und Weiterentwicklun
- `App` - `App`
Ein bereitgestelltes System-Tool oder Modul. Eine App kann als Desktop-App, Menue-App, Systembar-Eintrag oder Quelle fuer Widgets/Funktionen auftreten. Ein bereitgestelltes System-Tool oder Modul. Eine App kann als Desktop-App, Menue-App, Systembar-Eintrag oder Quelle fuer Widgets/Funktionen auftreten.
- `API`
Die serverseitige Programmschnittstelle der Desktop-Anwendung. Sie wird im aktuellen Projekt auf demselben Host wie die Desktop-Shell unter `/api/v1/...` bereitgestellt.
- `Widget` - `Widget`
Eine kleine Funktion oder Mini-Anzeige. Widgets sind nicht automatisch identisch mit Apps. Eine App kann Widgets bereitstellen, muss es aber nicht. Eine kleine Funktion oder Mini-Anzeige. Widgets sind nicht automatisch identisch mit Apps. Eine App kann Widgets bereitstellen, muss es aber nicht.
@@ -82,6 +85,7 @@ Stand dieser Datei:
- `User Self Management` als Setup-App - `User Self Management` als Setup-App
- erster echter Modulpfad fuer klassische Module mit Modul-Discovery aus `modules/<modul>/` - erster echter Modulpfad fuer klassische Module mit Modul-Discovery aus `modules/<modul>/`
- `Mining-Checker` als erstes angebundenes klassisches Modul - `Mining-Checker` als erstes angebundenes klassisches Modul
- versionierte API auf demselben Host unter `(staging.)desktop.kusche.berlin/api/v1/...`
- Benutzereinstellungen fuer Desktop-Skin, App-Auswahl, Infobereich und Profildaten in einer eigenen Datenbanktabelle mit `_user_data`-Suffix - Benutzereinstellungen fuer Desktop-Skin, App-Auswahl, Infobereich und Profildaten in einer eigenen Datenbanktabelle mit `_user_data`-Suffix
- vorhandene JSON-Dateien dienen nur noch als Fallback oder Uebergang fuer lokale Entwicklung und Altbestaende - vorhandene JSON-Dateien dienen nur noch als Fallback oder Uebergang fuer lokale Entwicklung und Altbestaende
- LDAP-Synchronisierung fuer Standardfelder wie Name, E-Mail, Telefon, Titel und Ort - LDAP-Synchronisierung fuer Standardfelder wie Name, E-Mail, Telefon, Titel und Ort
@@ -96,6 +100,7 @@ Aus [README.md](/home/lars/Schreibtisch/Projekte/desktop.kusche.berlin/docs/READ
- `public/` ist der Web-Root fuer die Desktop-Shell - `public/` ist der Web-Root fuer die Desktop-Shell
- `src/Desktop/` enthaelt zentrale Desktop-Mechaniken - `src/Desktop/` enthaelt zentrale Desktop-Mechaniken
- die API bleibt auf demselben Host wie die Desktop-Shell und wird unter `/api/v1/...` versioniert
- `partials/desktop/` enthaelt Shell-Templates - `partials/desktop/` enthaelt Shell-Templates
- `modules/` bleibt Zielort fuer klassische Module - `modules/` bleibt Zielort fuer klassische Module
- `temp/nexus-module-import/` ist Rohbasis fuer importierte Nexus-Module - `temp/nexus-module-import/` ist Rohbasis fuer importierte Nexus-Module
@@ -136,6 +141,7 @@ Fuer einen spaeteren Hilfebereich sollen Inhalte aus dieser Datei in Themenblcke
- `Infobereich konfigurieren` - `Infobereich konfigurieren`
- `Apps und Desktop Type verwalten` - `Apps und Desktop Type verwalten`
- `Module verstehen und starten` - `Module verstehen und starten`
- `API-Pfade und Versionen verstehen`
- `Benutzerdaten und Synchronisierung` - `Benutzerdaten und Synchronisierung`
Die Inhalte sollen spaeter moeglichst nicht neu erfunden, sondern aus den zentral gepflegten Dateien abgeleitet werden. Die Inhalte sollen spaeter moeglichst nicht neu erfunden, sondern aus den zentral gepflegten Dateien abgeleitet werden.

View File

@@ -33,6 +33,7 @@ Zentraler Dokumentationsindex fuer das Projekt.
- `Old-Nexus/` wird nicht technisch eingebunden. - `Old-Nexus/` wird nicht technisch eingebunden.
- Skins `Windows`, `Apple`, `Linux` laufen auf einer gemeinsamen Shell. - Skins `Windows`, `Apple`, `Linux` laufen auf einer gemeinsamen Shell.
- Keycloak bleibt das Auth-System. - Keycloak bleibt das Auth-System.
- API und Desktop laufen auf demselben Host. Zielpfad ist `(staging.)desktop.kusche.berlin/api/v1/...`.
- der Theme-Handoff ist in [keycloak-theme-handoff.md](/home/lars/Schreibtisch/Projekte/desktop.kusche.berlin/docs/keycloak-theme-handoff.md) beschrieben. - der Theme-Handoff ist in [keycloak-theme-handoff.md](/home/lars/Schreibtisch/Projekte/desktop.kusche.berlin/docs/keycloak-theme-handoff.md) beschrieben.
## Dokumentationsregel ## Dokumentationsregel
@@ -49,3 +50,4 @@ Aktuell wichtig:
- der Mining-Checker ist das erste als echtes Desktop-Modul angebundene Modul unter `modules/mining-checker/` - der Mining-Checker ist das erste als echtes Desktop-Modul angebundene Modul unter `modules/mining-checker/`
- Modul-Assets koennen ueber einen gemeinsamen Auslieferungsweg aus dem Modul selbst geladen werden - Modul-Assets koennen ueber einen gemeinsamen Auslieferungsweg aus dem Modul selbst geladen werden
- die API bleibt vorerst auf demselben Host und wird nicht auf `api.desktop.kusche.berlin` ausgelagert

View File

@@ -25,6 +25,7 @@ Aktuell ist das Projekt auf einem V1-Scaffold-Stand:
- App-Registry, Widget-Registry und Import-Basis sind angelegt - App-Registry, Widget-Registry und Import-Basis sind angelegt
- erster echter Modulmechanismus fuer klassische Module ist vorhanden - erster echter Modulmechanismus fuer klassische Module ist vorhanden
- `Mining-Checker` ist als erstes klassisches Modul angebunden - `Mining-Checker` ist als erstes klassisches Modul angebunden
- API soll im Zielbild auf demselben Host unter `(staging.)desktop.kusche.berlin/api/v1/...` liegen
- Keycloak ist nur konzeptionell vorbereitet, nicht integriert - Keycloak ist nur konzeptionell vorbereitet, nicht integriert
- Admin-Bereiche und persistente User-Desktops sind noch offen - Admin-Bereiche und persistente User-Desktops sind noch offen
@@ -34,6 +35,7 @@ Aktuell ist das Projekt auf einem V1-Scaffold-Stand:
- keine Includes, Imports, Asset-Pfade oder Laufzeitkopplung auf Altbestand - keine Includes, Imports, Asset-Pfade oder Laufzeitkopplung auf Altbestand
- klassische Module bleiben strukturell unter `modules/<modul>/` - klassische Module bleiben strukturell unter `modules/<modul>/`
- die Desktop-Shell ist eine eigene Anwendungsschicht und kein Theme-Umbau des alten Systems - die Desktop-Shell ist eine eigene Anwendungsschicht und kein Theme-Umbau des alten Systems
- API und Desktop teilen sich im aktuellen Zielbild denselben Host; Standardpfad ist `/api/v1/...`
## Status Nach Datei ## Status Nach Datei

View File

@@ -33,6 +33,7 @@ Verbindlich ist:
- Nutzerdaten und Desktop-Preferences bevorzugt datenbankbasiert speichern, nicht dateibasiert - Nutzerdaten und Desktop-Preferences bevorzugt datenbankbasiert speichern, nicht dateibasiert
- `README.md`-Dateien in Teilbereichen aktuell halten - `README.md`-Dateien in Teilbereichen aktuell halten
- zentrale Doku bei jeder relevanten Struktur- oder Begriffsanpassung mitpflegen - zentrale Doku bei jeder relevanten Struktur- oder Begriffsanpassung mitpflegen
- API-Pfade versioniert und host-konsistent unter `(staging.)desktop.kusche.berlin/api/v1/...` halten
## NoGo's ## NoGo's
@@ -43,12 +44,14 @@ Verbindlich ist:
- keine nur lokalen README-Informationen ohne zentrale Uebernahme der wichtigen Punkte - keine nur lokalen README-Informationen ohne zentrale Uebernahme der wichtigen Punkte
- keine Hilfeinhalte nur in Chatverlaeufen oder Ad-hoc-Notizen belassen - keine Hilfeinhalte nur in Chatverlaeufen oder Ad-hoc-Notizen belassen
- keine produktive Architekturabhaengigkeit zu `Old-Nexus/` oder vergleichbaren Altbestaenden - keine produktive Architekturabhaengigkeit zu `Old-Nexus/` oder vergleichbaren Altbestaenden
- keine neue Standard-API-Domain wie `api.desktop.kusche.berlin`, solange keine ausdrueckliche Architekturentscheidung dafuer getroffen wurde
## Architekturregeln ## Architekturregeln
- `modules/<modul>/` bleibt Ort fuer klassische Module - `modules/<modul>/` bleibt Ort fuer klassische Module
- globale Desktop-Mechaniken liegen im gemeinsamen Kern - globale Desktop-Mechaniken liegen im gemeinsamen Kern
- globale Modul-Helfer duerfen im gemeinsamen Kern liegen, Fachlogik aber nicht - globale Modul-Helfer duerfen im gemeinsamen Kern liegen, Fachlogik aber nicht
- API und Desktop teilen sich im aktuellen Zielbild denselben Host; offizielle Basis ist `/api/v1/...`
- Skins definieren Darstellung und Interaktionsdetails, nicht die Fachlogik - Skins definieren Darstellung und Interaktionsdetails, nicht die Fachlogik
- Hilfe- und Inhaltsdateien sollen spaeter maschinenlesbar oder zumindest klar strukturierbar in einen Hilfebereich ueberfuehrt werden koennen - Hilfe- und Inhaltsdateien sollen spaeter maschinenlesbar oder zumindest klar strukturierbar in einen Hilfebereich ueberfuehrt werden koennen
@@ -67,6 +70,7 @@ Bei jeder groesseren Aenderung ist zu pruefen:
- `docs/UMSETZUNGSSTATUS.md` nur dann als erledigt markieren, wenn es ausdruecklich freigegeben wurde - `docs/UMSETZUNGSSTATUS.md` nur dann als erledigt markieren, wenn es ausdruecklich freigegeben wurde
- Fokus liegt aktuell auf Desktop-UI und Apps - Fokus liegt aktuell auf Desktop-UI und Apps
- Login und Keycloak sind vorerst akzeptiert und nicht der aktuelle Hauptschwerpunkt - Login und Keycloak sind vorerst akzeptiert und nicht der aktuelle Hauptschwerpunkt
- API-Zielpfade sollen auf `(staging.)desktop.kusche.berlin/api/v1/...` vereinheitlicht werden
- Desktop-Icons sind frei verschiebbar und werden pro Benutzer und Skin lokal gespeichert - Desktop-Icons sind frei verschiebbar und werden pro Benutzer und Skin lokal gespeichert
- die Schriftfarbe von Desktop-Icons passt sich automatisch an den Hintergrund an - die Schriftfarbe von Desktop-Icons passt sich automatisch an den Hintergrund an
- Benutzerdaten sollen spaeter sauber in LDAP oder Keycloak geschrieben werden - Benutzerdaten sollen spaeter sauber in LDAP oder Keycloak geschrieben werden

View File

@@ -276,6 +276,27 @@
return formatDateByParts(value, true); return formatDateByParts(value, true);
} }
function normalizeApiUrl(rawUrl) {
const url = String(rawUrl || '');
if (!url || !apiBase.includes('?path=')) {
return url;
}
if (!url.startsWith(apiBase)) {
return url;
}
const [baseRoot, basePath = ''] = apiBase.split('?path=');
const suffix = url.slice(apiBase.length);
const [routeSuffix, extraQuery = ''] = suffix.split('?');
const normalizedPath = [basePath, routeSuffix]
.map((part) => String(part || '').replace(/^\/+|\/+$/g, ''))
.filter(Boolean)
.join('/');
return `${baseRoot}?path=${encodeURIComponent(normalizedPath)}${extraQuery ? `&${extraQuery}` : ''}`;
}
async function request(path, options) { async function request(path, options) {
const requestOptions = options && typeof options === 'object' ? { ...options } : {}; const requestOptions = options && typeof options === 'object' ? { ...options } : {};
const debugEnabled = !!debugBus.enabled; const debugEnabled = !!debugBus.enabled;
@@ -287,7 +308,7 @@
const controller = new AbortController(); const controller = new AbortController();
const timeoutId = window.setTimeout(() => controller.abort(), timeoutMs); const timeoutId = window.setTimeout(() => controller.abort(), timeoutMs);
const requestUrl = path; const requestUrl = normalizeApiUrl(path);
const headers = { ...(requestOptions.headers || {}) }; const headers = { ...(requestOptions.headers || {}) };
if (debugEnabled) { if (debugEnabled) {
headers['X-Mining-Debug'] = '1'; headers['X-Mining-Debug'] = '1';

View File

@@ -44,6 +44,7 @@ Danach bei Bedarf die fachlichen Projektanweisungen lesen:
- `README.md`-Dateien in Teilbereichen pflegen - `README.md`-Dateien in Teilbereichen pflegen
- wichtige Informationen aus dezentralen `README.md`-Dateien auch zentral in `docs/` halten - wichtige Informationen aus dezentralen `README.md`-Dateien auch zentral in `docs/` halten
- `Old-Nexus/` oder Altbestand nie technisch zur Laufzeit einbinden - `Old-Nexus/` oder Altbestand nie technisch zur Laufzeit einbinden
- API-Pfade im aktuellen Projektziel unter `(staging.)desktop.kusche.berlin/api/v1/...` halten und keine separate Standard-API-Domain annehmen
## Wichtige Dokumente ## Wichtige Dokumente