Files
projektuebersicht/README.md
T

5.3 KiB

Projektübersicht — README

Übersicht

Dieses Projekt ist eine lokale Single-Page-Webanwendung zur Verwaltung elektrotechnischer Projekte und Sitzungsübersichten. Die Anwendung besteht aus:

  • einem Frontend in Test.html, styles.css und main.v2.js
  • einem einfachen Node.js-Server in server.js
  • einem Datenspeicher in CSV-Dateien unter sessions/
  • einem Docker-Setup unter Docker/

Datei- und Komponentenübersicht

Wichtige Laufzeit-Dateien

  • server.js

    • Node.js/Express-Server
    • dient als API für das Frontend
    • stellt statische Dateien (Test.html, main.v2.js, styles.css, etc.) bereit
    • implementiert Endpunkte:
      • GET / → liefert Test.html
      • GET /load-all → lädt alle CSV-Dateien aus dem aktiven sessions/<DEPARTMENT>/-Ordner inkl. _people.csv
      • POST /save-csv → speichert eine CSV-Datei (Dateiname wird validiert)
      • POST /delete-csv → löscht eine CSV-Datei
      • GET /health → Gesundheitscheck
    • legt das sessions-Verzeichnis beim Start an, falls es nicht existiert
    • beendet sich mit aussagekräftiger Fehlermeldung, wenn der Port belegt ist
  • package.json

    • definiert den Node.js-Startbefehl npm start
    • enthält Produktionsabhängigkeiten express und cors
  • package-lock.json

    • wird für reproduzierbare Docker-Builds verwendet (npm ci)
  • main.v2.js

    • komplette Client-Logik der Anwendung
    • rendert das Projektboard, die Projekt- und Personenverwaltung sowie die Auslastungsansicht
    • lädt Daten über den Server und speichert Änderungen zurück als CSV
    • verwendet currentDepartment zur Trennung von Abteilungen (ELT, HLS, ARCH)
    • speichert:
      • sessions/<DEPT>/<WEEK>.csv
      • sessions/<DEPT>/_people.csv (globale Personenliste pro Abteilung)
    • sortiert Sitzungen nach Kalenderwoche, nicht alphabetisch
    • sperrt historische Sitzungen automatisch (bis auf die chronologisch letzte)
    • Personen sind global pro Abteilung verwaltet; historische Sitzungen behalten ihre lokalen Personenkopien
  • Test.html

    • die Benutzeroberfläche der Anwendung
    • lädt styles.css und main.v2.js
    • enthält die Abteilungsauswahl, Sitzungsnavigation, Tab-Navigation und das Passwort-Modal
  • styles.css

    • Layout und Styling der Oberfläche

Docker-bezogene Dateien

  • Docker/Dockerfile

    • Basis-Image: node:20-alpine
    • kopiert package.json und package-lock.json, installiert Produktionsabhängigkeiten mit npm ci
    • kopiert den Rest des Projekts in /app
    • legt sicherheitshalber /app/sessions an
    • läuft als nicht-root-User node
    • enthält einen HEALTHCHECK auf /health
    • startet node server.js
  • docker-compose.yml

    • definiert den Service projektuebersicht
    • baut das Image aus dem Projektstamm mit Docker/Dockerfile
    • mappt Port 3003:3003
    • bindet das Host-Verzeichnis ./sessions in den Container nach /app/sessions
    • setzt restart: unless-stopped
    • definiert einen healthcheck
  • .dockerignore

    • schließt unnötige Dateien aus dem Docker-Build aus: Docker/, node_modules/, npm-debug.log, .git, .gitignore

Sonstige Dateien

  • dein_bild.ico

    • optionales Icon, wird vom Server statisch ausgeliefert, wenn angefragt
  • AGENTS.md

    • Projektnotizen / Dokumentation, aber nicht Teil des Anwendungslaufs

Speicherorte und Datenfluss

Speicherung

  • Alle persistierten Daten werden als CSV-Dateien in sessions/ gespeichert.
  • Innerhalb von sessions/ existieren Abteilungsordner:
    • sessions/ELT/
    • sessions/HLS/
    • sessions/ARCH/
  • Jede Abteilung enthält mindestens:
    • _people.csv → globale Personenliste mit Rollen und vollständigem Namen
    • KW_XX___YYYY.csv oder vergleichbare Sitzungsdateien → Sitzungsdaten mit Projekten, Zuordnungen und Anwesenheit

Wo wird der Server erstellt?

  • Der Server wird in server.js erstellt.
  • server.js startet einen Express-Server auf Port 3003 oder dem Wert von process.env.PORT.
  • Das Frontend ruft diesen Server über window.location.origin an.

Wo werden die Dateien gespeichert?

  • Das Frontend schreibt über den Server in das Dateisystem.
  • In main.v2.js ruft die Anwendung beim Speichern /save-csv auf.
  • Der Server legt CSV-Dateien unter sessions/<DEPARTMENT>/ ab.
  • Beispiel:
    • sessions/ELT/KW_32___2026.csv
    • sessions/ELT/_people.csv

Betrieb

Lokal mit Node.js

npm install
npm start

Danach ist die Anwendung erreichbar unter http://localhost:3003.

Falls der Port belegt ist:

PORT=3004 npm start

Mit Docker

Im Projektstamm ausführen:

docker compose -f Docker/docker-compose.yml up --build

Danach ist die Anwendung erreichbar unter:

http://localhost:3003

Wichtige Hinweise

  • Der Server benötigt Lese-/Schreibzugriff auf sessions/.
  • Die Docker-Compose-Konfiguration mountet ./sessions in den Container. Achte darauf, dass der relative Pfad im Kontext korrekt ist, wenn du docker compose aus einem anderen Verzeichnis startest.
  • main.v2.js arbeitet mit Abteilungsparametern und speichert Daten abteilungsweise in separaten Unterordnern.
  • Die Passwortfunktion ist nur ein einfacher Client-Mechanismus im Frontend und kein echter Sicherheitsmechanismus.
  • Globale Personen werden in _people.csv verwaltet. Wird eine Person global gelöscht, bleibt sie in bereits existierenden Sitzungen sichtbar.