forked from jappel/leistungsbilanz-ts
Align runtime and editor documentation with current implementation
This commit is contained in:
parent
79fcb75ffb
commit
0a17da2b8e
5 changed files with 48 additions and 14 deletions
13
README.md
13
README.md
|
|
@ -4,10 +4,12 @@ Leistungsbilanz ist eine Webanwendung für die elektrische Ausführungsplanung.
|
||||||
Mittelpunkt steht ein tabellenähnlicher Stromkreislisten-Editor, der Stromkreise,
|
Mittelpunkt steht ein tabellenähnlicher Stromkreislisten-Editor, der Stromkreise,
|
||||||
Gerätezeilen und wiederverwendbare Projektgeräte fachlich getrennt behandelt.
|
Gerätezeilen und wiederverwendbare Projektgeräte fachlich getrennt behandelt.
|
||||||
|
|
||||||
Das Projekt befindet sich in aktiver Entwicklung. Der lokale Entwicklungsbetrieb
|
Das Projekt befindet sich in aktiver Entwicklung. Für SQLite stehen ein
|
||||||
mit SQLite und Docker Compose ist unterstützt. Ein Produktionsdeployment,
|
Docker-Server-Stack mit gebautem Anwendungscode und ein separater
|
||||||
Mehrbenutzerbetrieb und der Revit-/IFCGUID-Datenaustausch sind noch nicht
|
Entwicklungsstack bereit. Ein vollständig unterstütztes Produktionsdeployment
|
||||||
implementiert.
|
und Mehrbenutzerbetrieb fehlen weiterhin. Revit-CSV-Konfiguration, Vorschau
|
||||||
|
und bestätigter Erstimport sind implementiert; die Editoroberfläche zur
|
||||||
|
Objektzuordnung, Folgeimporte und Rückexport stehen noch aus.
|
||||||
|
|
||||||
## Unterstützter Arbeitsablauf
|
## Unterstützter Arbeitsablauf
|
||||||
|
|
||||||
|
|
@ -25,6 +27,9 @@ implementiert.
|
||||||
- Änderungen projektweit und auch nach einem Reload rückgängig machen und wiederholen
|
- Änderungen projektweit und auch nach einem Reload rückgängig machen und wiederholen
|
||||||
- benannte Sicherungspunkte anlegen, wiederherstellen und Revisionen einsehen
|
- benannte Sicherungspunkte anlegen, wiederherstellen und Revisionen einsehen
|
||||||
- automatische Sicherungspunkte mit begrenzter Aufbewahrung nutzen
|
- automatische Sicherungspunkte mit begrenzter Aufbewahrung nutzen
|
||||||
|
- Revit-CSV-Dateien konfigurieren, prüfen und nach expliziter Zuordnung von
|
||||||
|
Räumen, Verteilungen und Projektgeräten erstmals importieren; dabei entstehen
|
||||||
|
noch keine Stromkreise oder Gerätezeilen
|
||||||
|
|
||||||
## Technik
|
## Technik
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -161,6 +161,11 @@ across multiple sections is atomic and occupies one history step. Explicit
|
||||||
renumbering uses a collision-safe persistent project command and one
|
renumbering uses a collision-safe persistent project command and one
|
||||||
project-history step.
|
project-history step.
|
||||||
|
|
||||||
|
The editor creates client-side UUIDs through `createClientId` in
|
||||||
|
`src/frontend/utils/client-id.ts`. It uses `crypto.randomUUID()` when available
|
||||||
|
and otherwise generates a UUID v4 with `crypto.getRandomValues()`, so insertion
|
||||||
|
also works over plain HTTP from another machine in the LAN.
|
||||||
|
|
||||||
Covered operations include:
|
Covered operations include:
|
||||||
|
|
||||||
- insert/delete circuit
|
- insert/delete circuit
|
||||||
|
|
|
||||||
|
|
@ -27,9 +27,18 @@ Next.js App Router ── /api/* Rewrite ──▶ Express API :3000
|
||||||
data/leistungsbilanz.db (SQLite)
|
data/leistungsbilanz.db (SQLite)
|
||||||
```
|
```
|
||||||
|
|
||||||
Im Docker-Entwicklungssetup laufen Frontend und API in getrennten Containern. Das
|
In beiden Docker-Stacks laufen Frontend und API in getrennten Containern.
|
||||||
Frontend leitet `/api/*` über `API_INTERNAL_URL` an die API weiter. Die Datenbank
|
`compose.yaml` startet den gebauten Stand, `compose.dev.yaml` die Entwicklung
|
||||||
liegt über einen Host-Mount außerhalb des Containers.
|
mit Hot Reload. Das Frontend leitet `/api/*` über `API_INTERNAL_URL` an die API
|
||||||
|
weiter; beim gebauten Stand wird das Ziel zur Build-Zeit festgelegt. Die
|
||||||
|
Datenbank liegt über einen Host-Mount außerhalb des Containers.
|
||||||
|
|
||||||
|
Neue IDs für Stromkreise, Gerätezeilen, Gruppen und Verteilerkomponenten erzeugt
|
||||||
|
der Editor über `src/frontend/utils/client-id.ts` (`createClientId`). Die
|
||||||
|
Hilfsfunktion nutzt `crypto.randomUUID()`, sofern verfügbar, andernfalls
|
||||||
|
`crypto.getRandomValues()` mit UUID-v4-Format. Damit funktioniert das Anlegen
|
||||||
|
auch beim HTTP-Zugriff im LAN ohne sicheren Browserkontext. Die IDs entstehen
|
||||||
|
vor dem Command und bleiben über Undo/Redo unverändert.
|
||||||
|
|
||||||
## Wichtige Einstiegspunkte
|
## Wichtige Einstiegspunkte
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,9 +16,10 @@ und macOS keine inotify-Events durchreichen; das kostet dauerhaft CPU, auch
|
||||||
ohne Benutzeraktivität. Dieser Stack gehört deshalb nur auf einen
|
ohne Benutzeraktivität. Dieser Stack gehört deshalb nur auf einen
|
||||||
Entwicklungsrechner.
|
Entwicklungsrechner.
|
||||||
|
|
||||||
Beides enthält weder TLS, Authentifizierung, Reverse Proxy, Prozesshärtung noch
|
Beide Stacks enthalten weder TLS, Authentifizierung, einen vorgeschalteten
|
||||||
ein zentral betriebenes Datenbanksystem. Der Stack darf deshalb nicht öffentlich
|
Reverse Proxy noch ein zentral betriebenes Datenbanksystem. Die oben genannten
|
||||||
erreichbar gemacht werden.
|
Container-Schutzmaßnahmen ersetzen diese Funktionen nicht. Der Stack darf
|
||||||
|
deshalb nicht öffentlich erreichbar gemacht werden.
|
||||||
|
|
||||||
## Topologie
|
## Topologie
|
||||||
|
|
||||||
|
|
@ -34,6 +35,11 @@ erreicht, kann jedes Projekt lesen und ändern. Erreichbar ist sie nur aus dem
|
||||||
Compose-Netz, praktisch also über den Next.js-Rewrite. Im Entwicklungs-Stack
|
Compose-Netz, praktisch also über den Next.js-Rewrite. Im Entwicklungs-Stack
|
||||||
hängen beide Ports am Loopback und sind nicht aus dem LAN erreichbar.
|
hängen beide Ports am Loopback und sind nicht aus dem LAN erreichbar.
|
||||||
|
|
||||||
|
Beim HTTP-Zugriff auf den Server-Stack aus dem LAN erzeugt der Editor neue
|
||||||
|
UUIDs über `createClientId`, mit `crypto.getRandomValues()` als Ersatz für das
|
||||||
|
dort nicht verfügbare `crypto.randomUUID()`. HTTPS ist für diese
|
||||||
|
ID-Erzeugung nicht erforderlich.
|
||||||
|
|
||||||
### Speichergrenzen
|
### Speichergrenzen
|
||||||
|
|
||||||
Jeder Dienst hat ein `mem_limit`. Im Server-Stack ist zusätzlich
|
Jeder Dienst hat ein `mem_limit`. Im Server-Stack ist zusätzlich
|
||||||
|
|
@ -140,14 +146,17 @@ Vor einer produktiven Installation werden mindestens benötigt:
|
||||||
- Entscheidung, ob SQLite für einen einzelnen Prozess genügt oder PostgreSQL für
|
- Entscheidung, ob SQLite für einen einzelnen Prozess genügt oder PostgreSQL für
|
||||||
Mehrbenutzerbetrieb erforderlich ist
|
Mehrbenutzerbetrieb erforderlich ist
|
||||||
|
|
||||||
Bis diese Punkte umgesetzt und getestet sind, besteht die „Installation“ aus dem
|
Der in der README beschriebene Server-Stack ermöglicht bereits den Betrieb des
|
||||||
lokalen Entwicklungsstart in der README.
|
gebauten Stands in einer geschützten Umgebung. Ein vollständig unterstütztes
|
||||||
|
Produktionssetup bleibt bis zur Umsetzung und Prüfung dieser Punkte offen.
|
||||||
|
|
||||||
## Backup und Wiederherstellung
|
## Backup und Wiederherstellung
|
||||||
|
|
||||||
`npm run db:backup` erzeugt unter `data/backups/` ein konsistentes SQLite-Backup,
|
`npm run db:backup` erzeugt unter `data/backups/` ein konsistentes SQLite-Backup,
|
||||||
öffnet es unabhängig und prüft Integrität sowie Fremdschlüssel. Diese
|
öffnet es unabhängig und prüft Integrität sowie Fremdschlüssel. Diese
|
||||||
Dateisicherungen sind von zukünftigen logischen Projektversionen getrennt.
|
Dateisicherungen sind von den bereits vorhandenen benannten und automatischen
|
||||||
|
logischen Projektsicherungen getrennt. Projektsicherungen werden über die
|
||||||
|
Projektseite wiederhergestellt und unterstützen persistentes Undo/Redo.
|
||||||
|
|
||||||
Eine produktive Restore-Anweisung wird erst zusammen mit einem unterstützten
|
Eine produktive Restore-Anweisung wird erst zusammen mit einem unterstützten
|
||||||
Produktionsbetrieb veröffentlicht. Lokale Wiederherstellung darf nur bei
|
Produktionsbetrieb veröffentlicht. Lokale Wiederherstellung darf nur bei
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,11 @@ Ein sauberer Clone enthält keine SQLite-Datenbank. Beim ersten Start werden
|
||||||
`data/leistungsbilanz.db`, alle Tabellen und Migrationseinträge automatisch
|
`data/leistungsbilanz.db`, alle Tabellen und Migrationseinträge automatisch
|
||||||
angelegt. Das Frontend ist unter <http://localhost:3001> erreichbar.
|
angelegt. Das Frontend ist unter <http://localhost:3001> erreichbar.
|
||||||
|
|
||||||
|
Dieser Standard-Stack verwendet gebauten Anwendungscode. Für die Entwicklung
|
||||||
|
mit Quellcode-Mounts und Hot Reload stattdessen
|
||||||
|
`docker compose -f compose.dev.yaml up --build --detach` verwenden; die Dienste
|
||||||
|
sind dabei nur über die Loopback-Ports des Entwicklungsrechners erreichbar.
|
||||||
|
|
||||||
Für direkte Node.js-Entwicklung:
|
Für direkte Node.js-Entwicklung:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
|
|
@ -86,7 +91,8 @@ Bei Docker- oder Laufzeitänderungen zusätzlich:
|
||||||
```powershell
|
```powershell
|
||||||
docker compose up --build --detach
|
docker compose up --build --detach
|
||||||
docker compose ps
|
docker compose ps
|
||||||
Invoke-WebRequest http://localhost:3000/health
|
Invoke-WebRequest http://localhost:3001/health
|
||||||
|
Invoke-WebRequest http://localhost:3001/web-health
|
||||||
```
|
```
|
||||||
|
|
||||||
Bei sichtbaren Editoränderungen ist außerdem ein kurzer GUI-Test erforderlich.
|
Bei sichtbaren Editoränderungen ist außerdem ein kurzer GUI-Test erforderlich.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue