From 1c176ea6215edaa3da86c492f483f66887056a06 Mon Sep 17 00:00:00 2001 From: Erik Dunin Date: Tue, 18 Aug 2026 09:16:59 +0200 Subject: [PATCH] DB Import und Export sowie Backup und kleinere Fehlerbeseitigung --- AGENTS.md | 71 +- README.md | 74 ++- public/Test.html | 12 + public/js/backup.js | 39 ++ public/js/board/board.js | 2 +- public/js/csv.js | 42 ++ public/js/import.js | 67 ++ public/js/people/people.js | 16 +- public/js/plan/plan-state.js | 36 +- public/js/server.js | 26 +- public/js/store.js | 172 ++++- public/js/tabs-auth.js | 1 + public/js/weeks.js | 12 +- server.js | 607 +++++++++++++++++- ...ojektuebersicht_2026-08-18T06-36-48-511.db | Bin 0 -> 212992 bytes ...ojektuebersicht_2026-08-18T06-41-14-950.db | Bin 0 -> 212992 bytes ...ojektuebersicht_2026-08-18T06-41-14-963.db | Bin 0 -> 212992 bytes ...ojektuebersicht_2026-08-18T06-43-13-525.db | Bin 0 -> 212992 bytes ...ojektuebersicht_2026-08-18T06-47-01-551.db | Bin 0 -> 212992 bytes ...ojektuebersicht_2026-08-18T07-09-35-889.db | Bin 0 -> 212992 bytes ...ojektuebersicht_2026-08-18T07-10-17-549.db | Bin 0 -> 212992 bytes ...ojektuebersicht_2026-08-18T07-10-17-555.db | Bin 0 -> 212992 bytes ...ojektuebersicht_2026-08-18T07-12-27-276.db | Bin 0 -> 212992 bytes ...ojektuebersicht_2026-08-18T07-14-16-193.db | Bin 0 -> 212992 bytes 24 files changed, 1081 insertions(+), 96 deletions(-) create mode 100644 public/js/backup.js create mode 100644 public/js/csv.js create mode 100644 public/js/import.js create mode 100644 sessions/backups/projektuebersicht_2026-08-18T06-36-48-511.db create mode 100644 sessions/backups/projektuebersicht_2026-08-18T06-41-14-950.db create mode 100644 sessions/backups/projektuebersicht_2026-08-18T06-41-14-963.db create mode 100644 sessions/backups/projektuebersicht_2026-08-18T06-43-13-525.db create mode 100644 sessions/backups/projektuebersicht_2026-08-18T06-47-01-551.db create mode 100644 sessions/backups/projektuebersicht_2026-08-18T07-09-35-889.db create mode 100644 sessions/backups/projektuebersicht_2026-08-18T07-10-17-549.db create mode 100644 sessions/backups/projektuebersicht_2026-08-18T07-10-17-555.db create mode 100644 sessions/backups/projektuebersicht_2026-08-18T07-12-27-276.db create mode 100644 sessions/backups/projektuebersicht_2026-08-18T07-14-16-193.db diff --git a/AGENTS.md b/AGENTS.md index 46d0fab..6370c16 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -42,6 +42,9 @@ user-facing text. │ │ ├── showmode.js # Show-Mode (Präsentationsmodus) │ │ ├── tabs-auth.js # showTab, confirmPassword (SHA256-Passwortschutz) │ │ ├── pdf.js # PDF-Export (pdfmake, A3 quer) +│ │ ├── csv.js # exportCSV (lädt ZIP von GET /export-csv) +│ │ ├── backup.js # downloadBackup (lädt SQLite-Snapshot von GET /backup) +│ │ ├── import.js # importDb (Backup-Wiederherstellung über POST /import, passwortgeschützt) │ │ └── init.js # renderAll/initUiState + Seiteneinstieg (nur Test.html) │ │ ├── board/ # tab-specific: Projektboard │ │ │ └── board.js # Projektboard-Rendering, Status-Editor, Anwesenheit, Zuordnung @@ -94,13 +97,44 @@ docker compose up --build # Docker variant (compose file is at repo root) (`/js/...`, `/styles.css`) so they resolve on nested routes. - `GET /load-all?department=` → `{weeks:[weekObj], people:[personObj]}` with the global people list in `people`; weeks are full JSON week objects (id, label, - date, locked, people, attendance, projects), sorted by label. -- `POST /save-week {department, week}` → upserts one week (JSON object, keyed by - department + label). Used by `sendWeekToServer()`. + date, locked, updatedAt, people, attendance, projects), sorted by label. +- `POST /save-week {department, week, baseUpdatedAt}` → upserts one week (JSON + object, keyed by department + label). Used by `sendWeekToServer()`. The client + sends its local revision in `baseUpdatedAt` (the `updatedAt` value from + `load-all`); the server compares it to `weeks.updated_at` before writing and + answers `409 {ok:false, conflict:true, error, updatedAt}` if someone else + saved the week in the meantime. A save with a **non-empty** base for a week + the server no longer knows is also rejected with 409 ("wurde gelöscht") so a + deleted week can't silently resurrect; only new weeks (empty/missing base) + pass. On success it returns `{ok:true, updatedAt}` (the new revision), which + the client stores as the new sync base. Clients WITHOUT `baseUpdatedAt` (old + versions) always pass. The check runs synchronously in-process before the + write transaction (no race between check and write). - `POST /save-people {department, people}` → replaces the department's global people list (JSON array). - `POST /delete-week {department, label}` → deletes the week; missing label yields 400, missing week tolerates with `deleted:false`. +- `GET /export-csv?department=` → ZIP with one readable CSV per logical entity + (wochen, personen, sitzungsteilnehmer, projekte, zuordnungen, + leistungsphasen, aktuelle-leistungsphasen, aufwand-je-leistungsphase, + projektplaene, todos, meilensteine) for that department. CSV: UTF-8 with BOM, + CRLF, `;` separator by default (overridable via `?sep=`; German Excel opens + it directly). ZIP is built in pure Node (`zlib.deflateRawSync`, manual CRC32, + no external library). Used by `exportCSV()` in `js/csv.js`. +- `GET /backup` → consistent SQLite snapshot (`VACUUM INTO`, WAL-safe) as a + `.db` file download (temp file in `os.tmpdir()`, deleted after send). Used by + `downloadBackup()` in `js/backup.js`. Additionally, on server startup the + server writes a timestamped copy to `sessions/backups/` (also via + `VACUUM INTO`) and keeps only the `MAX_BACKUPS` newest ones (default 10). +- `POST /import` → restores the whole database from a `.db` backup file sent as + a raw binary body (`express.raw`, limit 100 MB). Validates the schema + (`pragma_table_info` on every table, exact column match vs. live DB), then + swaps all data via `ATTACH DATABASE …` + DELETE/INSERT-SELECT inside one + transaction (rollback on error). Immediately BEFORE the restore the server + saves a fresh auto-backup of the current state via `runAutoBackup()` (so a + restore can be undone), then performs the swap. Used by `importDb()` in + `js/import.js`, which is password-gated (`requestedAction` type `'importDb'` + in `js/tabs-auth.js`) like week deletion. - Valid departments hard-coded as `ELT|HLS|ARCH` in `server.js` (`VALID_DEPARTMENTS`); anything else silently falls back to `ELT`. Same set in `DEPARTMENTS` in `js/globals.js`. @@ -112,7 +146,9 @@ docker compose up --build # Docker variant (compose file is at repo root) - Data lives in `sessions/projektuebersicht.db` (`node:sqlite` `DatabaseSync`, WAL mode, `PRAGMA foreign_keys = ON`), created automatically. The schema is **fully relational** (18 tables) instead of one big JSON document per week: - - `weeks` (department, label, week_id, date, locked; PK `(department,label)`) + - `weeks` (department, label, week_id, date, locked, updated_at; PK + `(department,label)`) — `updated_at` is the revision timestamp for the + single-user conflict handling (see `/save-week` above) - `week_people` / `week_people_roles` — person copies per week (`array_order` keeps the list order, `role_order` the role array order) - `attendance` — présence per week/person @@ -129,12 +165,16 @@ docker compose up --build # Docker variant (compose file is at repo root) tables inside a transaction, `loadWeeks()` / `loadGlobalPeople()` (re)assemble them on read. `saveWeekRelational()` deletes the week's rows first (`deleteWeekData()`, note `weeks` uses `label`, all child tables - `week_label`). + `week_label`) and returns the new `updated_at` revision written by + `serializeWeek()`. - Migration on every start (idempotent): `migrateLegacySchema()` converts a DB from the old single-JSON-document format (detected via a `data` column in `weeks`): it reads the documents, drops all tables, recreates the relational schema and inserts everything in one - transaction. + transaction. Afterwards `migrateWeeksUpdatedAt()` adds the `updated_at` + column to `weeks` (idempotent, `ALTER TABLE … ADD COLUMN`). + Note: legacy rows keep `updated_at = ''`, so the first client save with an + empty `baseUpdatedAt` matches and only then a real revision is written. - The DB file sits in `sessions/`, so the existing Docker bind-mount `./sessions:/app/sessions` keeps it persistent. The path is overridable via the `DB_PATH` environment variable (used for tests), production default is @@ -166,10 +206,21 @@ docker compose up --build # Docker variant (compose file is at repo root) `openProjectPlan()` builds `/HLS/Projektplan/?weekLabel=…&projNr=…`, `findProjectForPlan` resolves them. Person IDs follow `personIdForName(name)` → `p_`. -- `save()` debounces 500 ms then `syncAllToServer()` writes **all** weeks (via - `sendWeekToServer()`) plus the people list (via `sendPeopleToServer()`) — not - just the changed week. Exception: `js/plan/plan-state.js` `savePlan()` bypasses - `save()` and writes only the current week directly via `sendWeekToServer()`. +- `save()` debounces 500 ms then `syncAllToServer()` writes **only dirty weeks** + (`dirtyWeeks` – track `markWeekDirty()`) via `sendWeekToServer()`, plus the + people list `markPeopleDirty()` via `sendPeopleToServer()` if marked dirty. + An in-flight guard (`syncInFlight`/`syncQueued`) prevents overlapping syncs + from double-POSTing the same week with the same revision (which would look + like a spurious 409). On success the server-provided `updatedAt` revision is + adopted as the new sync base; weeks whose save failed (network errors) stay + dirty and are retried. A `409` conflict response drops the local changes for + that week and `handleWeekConflict()` reloads **only that week** from the + server (`reloadWeekFromServer()`), leaving all other dirty weeks and the + people list untouched. Exception: `js/plan/plan-state.js` `savePlan()` + bypasses `save()` and writes only the current week directly via + `sendWeekToServer()` (with the same in-flight/trailing-save guard), adopting + the returned `updatedAt` and showing a toast on conflict. `switchWeek()` (in + `js/weeks.js`) does NOT trigger a save – only actual edits do. - `switchDepartment()` cancels a pending save debounce before switching, and `load()` discards stale `/load-all` responses after a department switch (frozen `requestedDepartment`), so late responses can never render or persist diff --git a/README.md b/README.md index 0050747..8197947 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,12 @@ # Projektübersicht — README ## Übersicht -Dieses Projekt ist eine lokale Single-Page-Webanwendung zur Verwaltung elektrotechnischer Projekte und Sitzungsübersichten. Die Anwendung besteht aus: +Dieses Projekt ist eine lokale Weboberfläche zur Verwaltung von TGA-Projekten (Elektro, HLS, Architektur) über wöchentliche Sitzungen. Die Anwendung besteht aus: -- einem Frontend in `Test.html`, `styles.css` und den JS-Modulen unter `public/js/` -- einem einfachen Node.js-Server in `server.js` -- einem Datenspeicher in einer SQLite-Datenbank (`node:sqlite`) unter `sessions/projektuebersicht.db` -- einem Docker-Setup unter `Docker/` +- einem Frontend aus zwei HTML-Einstiegen (`Test.html` für die Hauptansicht mit Tabs, `project-plan.html` für die Projektplanung/GANTT-Ansicht) plus `styles.css` und den JS-Modulen unter `public/js/` +- einem einfachen Node.js-/Express-Server in `server.js` +- einem Datenspeicher in einer SQLite-Datenbank (`node:sqlite`, benötigt Node ≥ 22.13) unter `sessions/projektuebersicht.db` +- einem Docker-Setup (`Docker/Dockerfile` + `docker-compose.yml` im Projektstamm) ## Datei- und Komponentenübersicht @@ -14,15 +14,19 @@ Dieses Projekt ist eine lokale Single-Page-Webanwendung zur Verwaltung elektrote - `server.js` - Node.js/Express-Server - dient als API für das Frontend - - stellt statische Dateien (`Test.html`, die Module unter `js/`, `styles.css`, etc.) bereit + - stellt statische Dateien (`Test.html`, `project-plan.html`, die Module unter `js/`, `styles.css`, etc.) bereit; statische Assets werden mit `Cache-Control: no-store` ausgeliefert - implementiert Endpunkte: - `GET /` → liefert `Test.html` - `GET /load-all?department=…` → lädt alle Sitzungen plus globale Personenliste einer Abteilung - - `POST /save-week {department, week}` → speichert/aktualisiert eine Sitzung + - `POST /save-week {department, week, baseUpdatedAt}` → speichert/aktualisiert eine Sitzung; mit `baseUpdatedAt` (die vom Client gehaltene Revision = `updatedAt` aus `load-all`) erkennt der Server veraltete Speicherungen und antwortet dann mit HTTP 409 `{ok:false, conflict:true, …}`; auch gelöschte Sitzungen werden mit nicht-leerer Basis nicht wiederbelebt (409). Erfolgreiche Saves antworten `{ok:true, updatedAt}` (neue Revision) - `POST /save-people {department, people}` → ersetzt die globale Personenliste einer Abteilung - `POST /delete-week {department, label}` → löscht eine Sitzung - - `GET /health` → Gesundheitscheck + - `GET /health` → Gesundheitscheck (`{ok:true}`) + - Deep Links je Abteilung + Tab, z. B. `GET /HLS/Auslastung` oder `GET /ELT/Projektübersicht` → liefert `Test.html`; gültige Tab-Slugs sind `Projektübersicht | Auslastung | Projekte | Projektbeteiligte`, alles andere ergibt 404 + - `GET //Projektplan(/)?` → liefert `project-plan.html` (GANTT-Ansicht); die Identifikation erfolgt über die Query-Parameter `weekLabel` und `projNr`, der Projektname ist nur ein lesbares Pfad-Segment + - validiert Abteilungen gegen `ELT | HLS | ARCH` (unbekannte fallen stillschweigend auf `ELT` zurück) - legt das `sessions`-Verzeichnis beim Start an, falls es nicht existiert + - JSON-Body-Limit von 2 MB - beendet sich mit aussagekräftiger Fehlermeldung, wenn der Port belegt ist - `package.json` @@ -33,11 +37,10 @@ Dieses Projekt ist eine lokale Single-Page-Webanwendung zur Verwaltung elektrote - wird für reproduzierbare Docker-Builds verwendet (`npm ci`) - `public/js/` (Module) - - Die Client-Logik ist in kleine klassische Script-Dateien aufgeteilt (alle Funktionen global auf `window`): - `globals.js`, `utils.js`, `ui.js`, `date-picker.js`, `server.js`, `store.js`, `weeks.js`, - `board.js`, `people.js`, `projects.js`, `load.js`, `gantt.js`, `showmode.js`, `tabs-auth.js`, `pdf.js`, - `init.js` sowie die Plan-Module unter `js/plan/` (`plan-state`, `plan-build-gantt`, `plan-gantt`, - `plan-drag`, `plan-modals`, `plan-schedule`). + - Die Client-Logik ist in kleine klassische Script-Dateien aufgeteilt (alle Funktionen global auf `window`, kein Bundler): + - gemeinsame Helfer: `globals.js`, `utils.js`, `ui.js`, `date-picker.js`, `server.js`, `store.js`, `weeks.js`, `gantt.js`, `showmode.js`, `tabs-auth.js`, `pdf.js`, `init.js` + - tab-spezifisch in eigenen Ordnern: `board/board.js` (Projektboard), `people/people.js` (Projektbeteiligte), `projects/projects.js` (Projekte), `load/load.js` (Auslastung) + - Planungs-Module unter `js/plan/` (`plan-state`, `plan-build-gantt`, `plan-gantt`, `plan-drag`, `plan-modals`, `plan-schedule`) - rendert das Projektboard, die Projekt- und Personenverwaltung sowie die Auslastungsansicht - lädt Daten über den Server und speichert Änderungen als JSON-Objekte in die SQLite-Datenbank zurück - verwendet `currentDepartment` zur Trennung von Abteilungen (`ELT`, `HLS`, `ARCH`) @@ -46,40 +49,42 @@ Dieses Projekt ist eine lokale Single-Page-Webanwendung zur Verwaltung elektrote - 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 + - speichert keine Daten in `localStorage` (dort liegt nur UI-Zustand wie Abteilung, Theme und Header-Collapse) - `Test.html` - - die Benutzeroberfläche der Anwendung + - die Haupt-Benutzeroberfläche der Anwendung (Tabs: Projektboard, Auslastung, Projekte, Projektbeteiligte) - lädt `styles.css` und die JS-Module aus `js/` in fester Reihenfolge (siehe `AGENTS.md`) - - enthält die Abteilungsauswahl, Sitzungsnavigation, Tab-Navigation und das Passwort-Modal + - enthält die Abteilungsauswahl, Sitzungsnavigation, Tab-Navigation, das Passwort-Modal sowie PDF-Export + - lädt CryptoJS (Passwortprüfung) und pdfmake (PDF-Export) von `cdnjs.cloudflare.com` — diese Funktionen benötigen daher Internetzugang - `project-plan.html` - die Planungsansicht (GANTT/TODOs/Meilensteine) pro Projekt - öffnet sich in einem neuen Tab über `openProjectPlan()` (`js/gantt.js`) - - lädt nur die gemeinsamen Helfermodule plus `js/plan/*` + - lädt nur die gemeinsamen Helfermodule plus `js/plan/*` und window-übergreifend abgestimmte Pfade - `styles.css` - Layout und Styling der Oberfläche ### Docker-bezogene Dateien - `Docker/Dockerfile` - - Basis-Image: `node:20-alpine` + - Basis-Image: `node:22-alpine` (nötig, da `node:sqlite` erst ab Node 22.13 ohne Flag stabil verfügbar ist) - kopiert `package.json` und `package-lock.json`, installiert Produktionsabhängigkeiten mit `npm ci` - - kopiert den Rest des Projekts in `/app` + - kopiert `server.js` und `public/` nach `/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` +- `docker-compose.yml` (im Projektstamm) - definiert den Service `projektuebersicht` - - baut das Image aus dem Projektstamm mit `Docker/Dockerfile` + - baut das Image mit Build-Kontext `.` und `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` + - schließt unnötige Dateien aus dem Docker-Build aus: `node_modules/`, `npm-debug.log`, `.git`, `.gitignore`, `Docker/*` (außer `Docker/Dockerfile`) ### Sonstige Dateien - `dein_bild.ico` @@ -88,25 +93,25 @@ Dieses Projekt ist eine lokale Single-Page-Webanwendung zur Verwaltung elektrote - `AGENTS.md` - Projektnotizen / Dokumentation, aber nicht Teil des Anwendungslaufs -## Speicherorte und Datenfluss +## Persistenz und Datenfluss ### Speicherung -- Alle persistierten Daten werden in einer SQLite-Datenbank (`node:sqlite`, `DatabaseSync`, WAL-Modus) unter `sessions/projektuebersicht.db` gespeichert. -- Innerhalb von `sessions/` liegen ausschließlich die SQLite-Datenbankdateien (`projektuebersicht.db` + WAL/SHM). +- Alle persistierten Daten werden in einer SQLite-Datenbank (`node:sqlite`, `DatabaseSync`, WAL-Modus, `PRAGMA foreign_keys = ON`) unter `sessions/projektuebersicht.db` gespeichert. +- Das Schema ist vollständig relational (19 Tabellen): `weeks`, `week_people` (+ `week_people_roles`), `attendance`, `projects`, `project_lph`, `project_assign`, `project_aufwand`, `project_aktuelle_lp`, `project_plan`, `plan_people`, `plan_todos` (+ `plan_todo_assignees`, `plan_todo_deps`), `plan_milestones` (+ `plan_milestone_deps`), `people` (+ `person_roles`, `person_absences`). Projekt-/Personen-IDs bleiben dadurch über Neustarts stabil. +- Der Datenbankpfad ist über die Umgebungsvariable `DB_PATH` übersteuerbar (für Tests/Backups), Standard ist `sessions/projektuebersicht.db`. -### 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. +### Server-API +- Der Server wird in `server.js` erstellt und startet auf Port `3003` oder dem Wert von `process.env.PORT`. +- Das Frontend ruft den Server über `window.location.origin` an (Fallback `http://localhost:3003` bei `file://`-Öffnung). ### Wo werden die Daten gespeichert? - Das Frontend schreibt über den Server in die SQLite-Datenbank. -- In `js/store.js` ruft die Anwendung beim Speichern `/save-week` (Sitzungen) bzw. `/save-people` (globale Personen) auf. -- Der Server schreibt die relationalen Tabellen in `sessions/projektuebersicht.db` (eine Transaktion pro Sitzung, siehe `serializeWeek()`/`loadWeeks()` in `server.js`). +- In `js/store.js` speichert die Anwendung nur **geänderte** Sitzungen (Dirty-Tracking über `markWeekDirty()`/`markPeopleDirty()`) via `/save-week` (Sitzungen) bzw. `/save-people` (globale Personen); ein In-Flight-Guard verhindert Doppel-Speicherungen. Jede Sitzung führt einen Revisions-Zeitstempel (`updated_at`, übertragen als `updatedAt`); speichert ein Client mit veralteter Revision (`baseUpdatedAt`), antwortet der Server mit HTTP 409 und der Client lädt nur diese eine Sitzung neu (andere ungespeicherte Änderungen bleiben erhalten). +- Der Server zerlegt die JSON-Objekte in die relationalen Tabellen (`serializeWeek()`/`loadWeeks()`) in einer Transaktion pro Sitzung. Beim Start migriert `migrateLegacySchema()` idempotent ein altes Single-JSON-Dokument-Schema in das relationale Schema; anschließend ergänzt `migrateWeeksUpdatedAt()` die `updated_at`-Spalte der `weeks`-Tabelle (idempotent). `PRAGMA busy_timeout = 5000` verhindert Fehler bei parallelen Schreibzugriffen. ## Betrieb -### Lokal mit Node.js +### Lokal mit Node.js (Node ≥ 22.13) ```bash npm install npm start @@ -122,7 +127,7 @@ PORT=3004 npm start Im Projektstamm ausführen: ```bash -docker compose -f Docker/docker-compose.yml up --build +docker compose up --build ``` Danach ist die Anwendung erreichbar unter: @@ -133,7 +138,8 @@ http://localhost:3003 ## Wichtige Hinweise - Der Server benötigt Lese-/Schreibzugriff auf `sessions/` (für die SQLite-Datenbank und das Docker-Bind-Mount). -- 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. +- Die Docker-Compose-Konfiguration liegt im Projektstamm und mountet `./sessions` in den Container. Achte darauf, dass der relative Pfad im Kontext korrekt ist, wenn du `docker compose` aus einem anderen Verzeichnis startest. - `js/store.js` und `js/server.js` arbeiten mit Abteilungsparametern und speichern Daten abteilungsweise getrennt. -- Die Passwortfunktion ist nur ein einfacher Client-Mechanismus im Frontend und kein echter Sicherheitsmechanismus. +- Die Passwortfunktion (Tabs „Projekte“/„Projektbeteiligte“, Sitzungslöschung, Entsperren) ist nur ein einfacher Client-Mechanismus im Frontend (SHA256-Vergleich) und kein echter Sicherheitsmechanismus. - Globale Personen werden pro Abteilung in der Datenbank verwaltet. Wird eine Person global gelöscht, bleibt sie in bereits existierenden Sitzungen sichtbar (Wochen-Personenkopien). +- CryptoJS und pdfmake werden von `cdnjs.cloudflare.com` geladen — PDF-Export und Passwortprüfung funktionieren ohne Internet nicht. \ No newline at end of file diff --git a/public/Test.html b/public/Test.html index 9bc079c..771ce82 100644 --- a/public/Test.html +++ b/public/Test.html @@ -77,6 +77,15 @@ + + + + @@ -238,6 +247,9 @@ + + + \ No newline at end of file diff --git a/public/js/backup.js b/public/js/backup.js new file mode 100644 index 0000000..65ef7e1 --- /dev/null +++ b/public/js/backup.js @@ -0,0 +1,39 @@ +// ----------------------------- +// Projektübersicht — Datenbank-Backup (Download) +// ----------------------------- +// Stellt downloadBackup() bereit: lädt einen konsistenten Snapshot der +// SQLite-Datenbank über GET /backup als .db-Datei herunter (VACUUM INTO, +// WAL-sicher). Hängt im Seitenmenü von Test.html am Button "DB Backup" und +// nutzt baseUrl() aus js/server.js. Ergänzt das automatische Backup, das der +// Server beim Start in sessions/backups/ ablegt. + +// downloadBackup: fordert den DB-Snapshot an und startet den Download. +// Kein Parameter, keine Rückgabe; Fehler werden über ein Alert gemeldet. +async function downloadBackup(){ + try { + const res = await fetch(baseUrl() + '/backup'); + if(!res.ok){ + let msg = 'Server HTTP ' + res.status; + try { + const json = await res.json(); + if(json && json.error) msg = json.error; + } catch(e){ /* Antwort war kein JSON */ } + throw new Error(msg); + } + const blob = await res.blob(); + const filename = 'projektuebersicht_backup_' + + new Date().toISOString().slice(0, 10) + '.db'; + + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = filename; + document.body.appendChild(a); + a.click(); + a.remove(); + setTimeout(() => URL.revokeObjectURL(url), 1000); + } catch(err){ + console.error('DB-Backup fehlgeschlagen:', err); + alert('DB-Backup fehlgeschlagen: ' + (err.message || err)); + } +} \ No newline at end of file diff --git a/public/js/board/board.js b/public/js/board/board.js index f8d0660..129f4a7 100644 --- a/public/js/board/board.js +++ b/public/js/board/board.js @@ -146,7 +146,7 @@ function renderBoard(){ const v = (p.lph[l]!==undefined && p.lph[l]!="") ? p.lph[l] : ""; const aktiv = l === aktLp; const inputAttr = locked ? 'readonly tabindex="-1"' : `onchange="editLph('${p.id}','${l}',this.value)"`; - body += ``; + body += ``; if(v!=""){ const pct = Math.min(100, parseFloat(v)||0); body += `
`; } body += ``; diff --git a/public/js/csv.js b/public/js/csv.js new file mode 100644 index 0000000..f2d7dce --- /dev/null +++ b/public/js/csv.js @@ -0,0 +1,42 @@ +// ----------------------------- +// Projektübersicht — CSV/ZIP-Export +// ----------------------------- +// Stellt exportCSV() bereit: lädt den ZIP mit den übersichtlichen CSV-Dateien +// der aktuellen Abteilung über GET /export-csv und stößt den Download an. +// Hängt im Seitenmenü von Test.html am Button "CSV Export" und nutzt baseUrl() +// aus js/server.js sowie currentDepartment aus js/globals.js. Der ZIP enthält +// pro logischer Entität eine CSV (Wochen, Personen, Projekte, …), erzeugt vom +// Server (siehe server.js im Projekt-Root). + +// exportCSV: fordert den CSV-Export der aktuellen Abteilung an und lädt ihn +// als ZIP-Datei herunter. Kein Parameter, keine Rückgabe; Fehler werden über +// ein Alert gemeldet. +async function exportCSV(){ + try { + const dept = currentDepartment || 'ELT'; + const res = await fetch(baseUrl() + '/export-csv?department=' + encodeURIComponent(dept)); + if(!res.ok){ + let msg = 'Server HTTP ' + res.status; + try { + const json = await res.json(); + if(json && json.error) msg = json.error; + } catch(e){ /* Antwort war kein JSON */ } + throw new Error(msg); + } + const blob = await res.blob(); + const filename = 'Projektuebersicht_' + dept + '_' + + new Date().toISOString().slice(0, 10) + '.zip'; + + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = filename; + document.body.appendChild(a); + a.click(); + a.remove(); + setTimeout(() => URL.revokeObjectURL(url), 1000); + } catch(err){ + console.error('CSV-Export fehlgeschlagen:', err); + alert('CSV-Export fehlgeschlagen: ' + (err.message || err)); + } +} \ No newline at end of file diff --git a/public/js/import.js b/public/js/import.js new file mode 100644 index 0000000..41fdb92 --- /dev/null +++ b/public/js/import.js @@ -0,0 +1,67 @@ +// ----------------------------- +// Projektübersicht — Datenbank-Import (Backup-Wiederherstellung) +// ----------------------------- +// Stellt importDb() bereit: wählt über einen Datei-Dialog eine mit "DB Backup" +// erzeugte .db-Datei aus, lädt sie als rohen Binär-Body an POST /import und +// lädt nach erfolgreicher Wiederherstellung die Seite neu. Da der Import den +// kompletten Datenbestand ersetzt, ist er passwortgeschützt (gleiche Logik wie +// Wochen-Löschung über requestedAction/isAuthenticated, siehe js/tabs-auth.js +// und js/weeks.js) und wird zusätzlich im Browser per Bestätigungsdialog +// abgesichert. + +// importDb: öffnet bei Bedarf das Passwort-Modal (requestedAction 'importDb') +// und startet danach den Datei-Dialog für das Backup. Parameter `skipAuth=true` +// überspringt die Passwortabfrage (wird von confirmPassword() genutzt). +// Keine Rückgabe. +function importDb(skipAuth = false){ + if(!skipAuth && !isAuthenticated){ + requestedAction = { type: 'importDb' }; + document.getElementById('passwordModal').style.display = 'flex'; + document.getElementById('passwordInput').value = ''; + document.getElementById('passwordInput').focus(); + return; + } + if(!confirm('Datenbank-Backup wirklich wiederherstellen?\n\nAlle aktuellen Daten werden ersetzt.')){ + requestedAction = null; + return; + } + const input = document.createElement('input'); + input.type = 'file'; + input.accept = '.db,application/octet-stream,application/x-sqlite3'; + input.onchange = () => { + const file = input.files && input.files[0]; + if(!file){ + requestedAction = null; + return; + } + uploadBackup(file); + }; + input.click(); + requestedAction = null; +} + +// uploadBackup: lädt die gewählte .db-Datei als rohen Binär-Body an +// POST /import und informiert über das Ergebnis. Bei Erfolg wird die Seite neu +// geladen, damit das Frontend den wiederhergestellten Datenbestand zeigt. +async function uploadBackup(file){ + try { + const res = await fetch(baseUrl() + '/import', { + method: 'POST', + headers: { 'Content-Type': 'application/octet-stream' }, + body: file + }); + if(!res.ok){ + let msg = 'Server HTTP ' + res.status; + try { + const json = await res.json(); + if(json && json.error) msg = json.error; + } catch(e){ /* Antwort war kein JSON */ } + throw new Error(msg); + } + alert('Datenbank-Backup erfolgreich wiederhergestellt.\nDie Seite wird neu geladen.'); + window.location.reload(); + } catch(err){ + console.error('DB-Import fehlgeschlagen:', err); + alert('DB-Import fehlgeschlagen: ' + (err.message || err)); + } +} \ No newline at end of file diff --git a/public/js/people/people.js b/public/js/people/people.js index 321b74b..cec167c 100644 --- a/public/js/people/people.js +++ b/public/js/people/people.js @@ -45,7 +45,7 @@ function addPerson(){ document.getElementById('newPersonFullName').value=''; document.getElementById('newPersonEmail').value=''; document.querySelectorAll('input[name="newPersonRoles"]').forEach(el=>el.checked=false); - save(); renderPeople(); renderBoard(); + save({people:true}); renderPeople(); renderBoard(); } // delPerson: entfernt eine Person aus der globalen Liste. Bereits in @@ -76,7 +76,7 @@ function delPerson(id){ w.people = (w.people || []).filter(p=>p.id!==id); } - save(); renderPeople(); renderBoard(); + save({people:true}); renderPeople(); renderBoard(); } // editPerson: ändert Name/Vollname/Rolle sowohl global als auch in der @@ -132,7 +132,7 @@ function editPerson(id,field,val){ delete w.attendance[id]; } } - save(); renderPeople(); renderBoard(); + save({people:true}); renderPeople(); renderBoard(); return; } @@ -146,7 +146,7 @@ function editPerson(id,field,val){ const localPerson = (w.people || []).find(p => p.id === id); if(localPerson) localPerson[field] = val; } - save(); renderPeople(); renderBoard(); + save({people:true}); renderPeople(); renderBoard(); } // togglePersonRole: fügt eine Rolle (`role`) zur Person `id` hinzu bzw. entfernt @@ -172,7 +172,7 @@ function togglePersonRole(id, role, checked){ if(globalPerson) updateRoles(globalPerson); if(localPerson) updateRoles(localPerson); - save(); renderPeople(); renderBoard(); + save({people:true}); renderPeople(); renderBoard(); } // renderPeople: baut die HTML-Liste der Personen für den Personen-Tab auf @@ -324,7 +324,7 @@ function reorderPeople(){ newPeople.forEach(p => { if(byId[p.id]) newWeekPeople.push(byId[p.id]); }); if(newWeekPeople.length === w.people.length) w.people = newWeekPeople; } - save(); + save({people:true}); } } @@ -348,7 +348,7 @@ function addAbsence(personId){ if(!Array.isArray(person.absences)) person.absences = []; person.absences.push({ id: uid(), start, end, type, note }); person.absences.sort((a,b) => parseDateISO(a.start) - parseDateISO(b.start)); - save(); + save({week:false, people:true}); renderPeople(); if(currentTab === 'gantt') renderGantt(); } @@ -361,7 +361,7 @@ function deleteAbsence(personId, absenceId){ const person = people.find(p => p.id === personId); if(!person || !person.absences) return; person.absences = person.absences.filter(a => a.id !== absenceId); - save(); + save({week:false, people:true}); renderPeople(); if(currentTab === 'gantt') renderGantt(); } \ No newline at end of file diff --git a/public/js/plan/plan-state.js b/public/js/plan/plan-state.js index c6e438f..b113434 100644 --- a/public/js/plan/plan-state.js +++ b/public/js/plan/plan-state.js @@ -176,19 +176,43 @@ window.PlanApp = { }).join(''); } - // Speichern: nur diese Sitzung; globale Personenliste nicht überschreiben + // Speichern: nur diese Sitzung; globale Personenliste nicht überschreiben. + // In-Flight-Schutz: läuft bereits ein Save, wird kein zweiter POST mit + // identischer Revisions-Basis abgeschickt (der würde fälschlich als 409- + // Konflikt gemeldet). Stattdessen wird ein Folgesave eingereiht, der nach + // Abschluss des laufenden Saves mit der dann frischen Revision nachzieht. + let savePlanRunning = false; + let savePlanQueued = false; function savePlan(){ if(!app.week || !app.project) return; - sendWeekToServer(app.week).catch(err => console.error('Speichern fehlgeschlagen:', err)); + if(savePlanRunning){ savePlanQueued = true; return; } + savePlanRunning = true; + sendWeekToServer(app.week) + .then(res => { + // Lokale Revisions-Basis aktualisieren, damit spätere eigene Saves + // nicht fälschlich als Konflikt gemeldet werden. + if(res && res.updatedAt) app.week.updatedAt = res.updatedAt; + }) + .catch(err => { + if(err && err.conflict){ + showToast('Konflikt: Die Sitzung wurde zwischenzeitlich geändert. Bitte Seite neu laden.'); + console.error('Speichern fehlgeschlagen (Konflikt):', err.message || err); + } else { + console.error('Speichern fehlgeschlagen:', err); + } + }) + .finally(() => { + savePlanRunning = false; + if(savePlanQueued){ savePlanQueued = false; savePlan(); } + }); } // saveGlobalPeople: schreibt die globale Personenliste der Abteilung als - // JSON-Array auf den Server, aber nur wenn sie nicht leer ist. + // JSON-Array auf den Server. Auch eine leere Liste wird gespeichert, damit + // das Löschen der letzten Person erhalten bleibt. function saveGlobalPeople(){ const people = db.globalPeople[app.department] || []; - if(people.length > 0){ - sendPeopleToServer(people).catch(err => console.error('Speichern Personen fehlgeschlagen:', err)); - } + sendPeopleToServer(people).catch(err => console.error('Speichern Personen fehlgeschlagen:', err)); } // Person in der globalen Liste finden (dort werden Abwesenheiten gepflegt) diff --git a/public/js/server.js b/public/js/server.js index 57a491e..e7281a3 100644 --- a/public/js/server.js +++ b/public/js/server.js @@ -34,14 +34,34 @@ function blobToDataUrl(blob){ } // sendWeekToServer: POSTet ein komplettes Wochen-Objekt (JSON) an -// /save-week. Parameter: week (Objekt). Rückgabe: Promise mit Server-Antwort. +// /save-week. Parameter: week (Objekt). Rückgabe: Promise mit +// Server-Antwort. `baseUpdatedAt` übermittelt die Revision, auf der die +// lokalen Daten beruhen; meldet der Server 409 (conflict), wird ein Error +// mit `err.conflict = true` und `err.updatedAt` geworfen, damit der Aufrufer +// den Konflikt anzeigen kann. function sendWeekToServer(week){ if(!window.fetch) return Promise.reject(new Error('fetch nicht verfügbar')); return fetch(baseUrl() + '/save-week',{ method:'POST', headers:{'Content-Type':'application/json; charset=utf-8'}, - body:JSON.stringify({week, department:currentDepartment}) - }).then(r=>{ if(!r.ok) throw new Error('Server HTTP '+r.status); return r.json(); }); + body:JSON.stringify({ + week, + department:currentDepartment, + baseUpdatedAt:(week && week.updatedAt) ? week.updatedAt : undefined + }) + }).then(r=>{ + return r.json().then(json => { + if(r.ok && json) return json; + if(json && json.conflict){ + const err = new Error(json.error || 'Konflikt: Sitzung wurde zwischenzeitlich geändert'); + err.conflict = true; + err.label = (week && week.label) || ''; + err.updatedAt = json.updatedAt; + throw err; + } + throw new Error('Server HTTP '+r.status); + }); + }); } // sendPeopleToServer: POSTet die globale Personenliste einer Abteilung als diff --git a/public/js/store.js b/public/js/store.js index a5628a2..c077d03 100644 --- a/public/js/store.js +++ b/public/js/store.js @@ -12,13 +12,33 @@ // `js/board/board.js`, `js/people/people.js`, `js/projects/projects.js` und `js/load/load.js`; das Speichern // ist über `saveSyncTimer` (in `js/globals.js` deklariert) um 500 ms debounced. -// save: synchronisiert die aktuellen Daten zum Server. -// Jede Sitzung wird als eigenes JSON-Dokument gespeichert. Personen und Rollen -// werden in der Sitzung selbst abgelegt. -function save(){ +// save: plant einen (debounced) Sync. Standardmäßig wird die aktuell gewählte +// Woche als geändert markiert, da sich die meisten Bearbeitungen auf die +// aktuelle Sitzung beziehen. Optionen: +// { week:false } – aktuelle Woche NICHT markieren (z. B. reine Personen-Aktionen) +// { people:true } – zusätzlich die globale Personenliste als geändert markieren +function save(opts = {}){ + if(opts.week !== false){ + const w = currentWeek(); + if(w) dirtyWeeks.add(w.label); + } + if(opts.people) dirtyPeople = true; scheduleSessionSync(); } +// Dirty-Tracking: merkt sich, welche Wochen bzw. ob die globale Personenliste +// seit dem letzten Sync lokal geändert wurden. Gespeichert wird nur das, was +// sich wirklich geändert hat (statt wie früher immer alle Wochen). +let dirtyWeeks = new Set(); +let dirtyPeople = false; + +// In-Flight-Schutz für syncAllToServer: läuft bereits ein Sync, wird kein +// zweiter gestartet (sonst senden zwei Syncs dieselbe Woche mit gleicher +// Revisions-Basis und der zweite bekäme einen scheinbaren 409-Konflikt). +// Stattdessen wird ein Nachlauf-Sync eingereiht und nach Abschluss ausgeführt. +let syncInFlight = false; +let syncQueued = false; + // scheduleSessionSync: plant den Speichervorgang für alle Wochen und Personen // über einen 500-ms-Timer (Debounce). Bei erneutem Aufruf wird ein laufender // Timer zurückgesetzt, damit aufeinanderfolgende Änderungen in einem Sync enden. @@ -27,30 +47,133 @@ function scheduleSessionSync(){ saveSyncTimer = setTimeout(() => { syncAllToServer(); saveSyncTimer = null; }, 500); } -// syncAllToServer: schreibt die gesamte Datenbank als JSON-Dokumente zum Server. -// Zuerst wird die globale Personenliste (`save-people`) gespeichert, danach jede -// Sitzung einzeln über `sendWeekToServer()`. -// Gibt nichts zurück; Fehler werden nur per console.error protokolliert. +// syncAllToServer: schreibt nur die seit dem letzten Sync geänderten Wochen +// plus – falls markiert – die globale Personenliste zum Server. Konflikte +// (409) auf einer Woche werden über handleWeekConflict() gemeldet. Fehlerhaft +// gespeicherte Wochen bleiben dirty, damit der nächste Sync sie erneut +// versucht; nur erfolgreich gespeicherte werden aus dem Dirty-Satz entfernt. function syncAllToServer(){ - // Zuerst globale Personenliste speichern - saveGlobalPeopleToServer(); - // Dann jede Sitzung speichern - db.weeks.forEach(w => { - sendWeekToServer(w) - .then(res => { if(res && res.ok) console.log('Sitzung gespeichert:', w.label); }) - .catch(err => { console.error('Sitzung konnte nicht gespeichert werden:', w.label, err.message || err); }); + if(syncInFlight){ syncQueued = true; return; } + syncInFlight = true; + + // Zuerst globale Personenliste speichern, falls geändert + const jobs = []; + if(dirtyPeople) jobs.push(saveGlobalPeopleToServer()); + + const weekLabels = Array.from(dirtyWeeks); + weekLabels.forEach(label => { + const w = db.weeks.find(x => x.label === label); + if(!w){ dirtyWeeks.delete(label); return; } + jobs.push(sendWeekToServer(w) + .then(res => { + if(res && res.ok){ + console.log('Sitzung gespeichert:', w.label); + // Lokale Revisions-Basis aktualisieren, damit spätere eigene Saves + // nicht fälschlich als Konflikt gemeldet werden. + if(res.updatedAt) w.updatedAt = res.updatedAt; + dirtyWeeks.delete(label); + } else { + console.error('Sitzung konnte nicht gespeichert werden:', w.label, res && res.error ? res.error : 'unbekannter Fehler'); + } + }) + .catch(err => { + if(err && err.conflict){ + dirtyWeeks.delete(label); + handleWeekConflict(w, err); + } else { + console.error('Sitzung konnte nicht gespeichert werden:', w.label, err.message || err); + // Label bleibt dirty -> der nächste Sync versucht es erneut. + } + })); + }); + + Promise.all(jobs).then(() => { + syncInFlight = false; + if(syncQueued){ syncQueued = false; syncAllToServer(); } }); } +// markWeekDirty: markiert eine bestimmte Woche (label) als geändert – für +// Aktionen, die Wochen AUFßER der aktuellen betreffen (z. B. Auto-Lock). +function markWeekDirty(label){ + if(typeof label === 'string' && label) dirtyWeeks.add(label); +} + +// markPeopleDirty: markiert die globale Personenliste als geändert. +function markPeopleDirty(){ + dirtyPeople = true; +} + +// handleWeekConflict: wird aufgerufen, wenn der Server eine zwischenzeitlich +// geänderte Woche meldet (409). Nur diese eine Woche wird vom Server neu +// geladen; andere lokal geänderte Wochen (dirtyWeeks) und die Personenliste +// bleiben unangetastet und gehen nicht verloren. +function handleWeekConflict(week, err){ + const label = (week && week.label) || (err && err.label) || ''; + alert('Achtung: ' + label + ' wurde zwischenzeitlich von einer anderen Person ' + + 'geändert. Ihre Änderungen an dieser Sitzung wurden nicht gespeichert; ' + + 'die aktuellen Daten dieser Sitzung werden geladen.'); + if(label) reloadWeekFromServer(label); + else load(); +} + +// reloadWeekFromServer: lädt die aktuelle Abteilung neu und ersetzt NUR die +// übergebene Woche (bzw. entfernt sie, falls sie am Server gelöscht wurde). +// Der Dirty-Zustand der konfliktbehafteten Woche wurde bereits von +// syncAllToServer entfernt; alle anderen Dirty-Änderungen bleiben erhalten. +function reloadWeekFromServer(label){ + const requestedDepartment = currentDepartment; + fetch(baseUrl() + '/load-all' + departmentParam()) + .then(r => { if(!r.ok) throw new Error('Server HTTP '+r.status); return r.json(); }) + .then(data => { + if(currentDepartment !== requestedDepartment) return; + const fresh = (Array.isArray(data.weeks) ? data.weeks : []) + .find(w => w && w.label === label); + const idx = db.weeks.findIndex(w => w.label === label); + if(idx >= 0){ + if(fresh){ + // Felder absichern (wie in load()), damit keine kaputten Daten crashen + if(!Array.isArray(fresh.people)) fresh.people = []; + if(!Array.isArray(fresh.projects)) fresh.projects = []; + if(!fresh.attendance) fresh.attendance = {}; + db.weeks[idx] = fresh; + } else { + db.weeks.splice(idx, 1); + } + // Wurde die aktuelle Woche entfernt, auf die letzte verbleibende wechseln + if(!db.weeks.some(w => w.id === db.currentWeek)){ + db.currentWeek = db.weeks.length ? db.weeks[db.weeks.length - 1].id : null; + } + } + renderAll(); + showTab(currentTab); + }) + .catch(err => { + console.error('Neu laden der Sitzung fehlgeschlagen:', err); + load(); + }); +} + // saveGlobalPeopleToServer: speichert die globale Personenliste der aktuellen -// Abteilung über `sendPeopleToServer()` (JSON-Array). -// Leere Personenlisten werden übersprungen (kein Schreibvorgang). +// Abteilung über `sendPeopleToServer()` (JSON-Array). Auch eine leere Liste +// wird gespeichert, damit das Löschen der letzten Person erhalten bleibt. Bei +// Erfolg wird der Dirty-Status für Personen zurückgesetzt, bei Fehler bleibt +// er erhalten (Retry beim nächsten Sync). Rückgabe: Promise. function saveGlobalPeopleToServer(){ const people = db.globalPeople[currentDepartment] || []; - if(people.length === 0) return; - sendPeopleToServer(people) - .then(res => { if(res && res.ok) console.log('Globale Personenliste gespeichert'); }) - .catch(err => { console.error('Globale Personenliste konnte nicht gespeichert werden:', err.message || err); }); + return sendPeopleToServer(people) + .then(res => { + if(res && res.ok){ + dirtyPeople = false; + console.log('Globale Personenliste gespeichert'); + } else { + console.error('Globale Personenliste konnte nicht gespeichert werden:', res && res.error ? res.error : 'unbekannter Fehler'); + } + }) + .catch(err => { + console.error('Globale Personenliste konnte nicht gespeichert werden:', err.message || err); + // dirtyPeople bleibt true -> der nächste Sync versucht es erneut. + }); } // switchDepartment: wechselt die aktive Abteilung (z.B. "ELT") und lädt deren @@ -63,6 +186,8 @@ function switchDepartment(dept){ // Sync nicht nach dem Reset mit dem neuen currentDepartment feuert und die // Daten der falschen Abteilung schreibt. if(saveSyncTimer){ clearTimeout(saveSyncTimer); saveSyncTimer = null; } + dirtyWeeks.clear(); + dirtyPeople = false; currentDepartment = dept; saveUiState(); updateRouteUrl(dept, currentTab); @@ -89,6 +214,11 @@ function switchDepartment(dept){ // die Ansicht. Kein Parameter, keine Rückgabe; bei Fehlern oder fehlenden // Daten werden Beispieldaten über `seed()` geladen. function load(){ + // Nach einem (Neu-)Load sind die lokalen Daten serverseitig aktuell: + // laufenden Debounce abbrechen und Dirty-Zustand verwerfen. + if(saveSyncTimer){ clearTimeout(saveSyncTimer); saveSyncTimer = null; } + dirtyWeeks.clear(); + dirtyPeople = false; if(!window.fetch){ alert('Ihr Browser unterstützt keine Netzwerk-Anfragen. Bitte verwenden Sie einen aktuellen Browser.'); seed(); return; diff --git a/public/js/tabs-auth.js b/public/js/tabs-auth.js index ba9b382..35407dc 100644 --- a/public/js/tabs-auth.js +++ b/public/js/tabs-auth.js @@ -59,6 +59,7 @@ function confirmPassword(){ if(action?.type==='tab') showTab(action.tab, true); else if(action?.type==='deleteWeek') deleteWeek(true); else if(action?.type==='unlockWeek') unlockCurrentWeek(true); + else if(action?.type==='importDb') importDb(true); }, 100); document.getElementById('passwordModal').style.display='none'; } else { diff --git a/public/js/weeks.js b/public/js/weeks.js index f7db3a5..96c4987 100644 --- a/public/js/weeks.js +++ b/public/js/weeks.js @@ -31,9 +31,11 @@ function updateWeekDate(){ // Kein Parameter; Rückgabe: das gefundene Woche-Objekt oder undefined. function currentWeek(){ return db.weeks.find(w=>w.id===db.currentWeek); } -// switchWeek: setzt die aktuell gewählte Wochen-ID (`id`), speichert und -// rendert die Ansicht neu. Keine Rückgabe. -function switchWeek(id){ db.currentWeek = id; save(); renderAll(); } +// switchWeek: setzt die aktuell gewählte Wochen-ID (`id`) und rendert die +// Ansicht neu. Es werden keine Daten geändert, daher wird nicht gespeichert +// (eine save() würde die Woche nur als dirty markieren und unnötig senden). +// Keine Rückgabe. +function switchWeek(id){ db.currentWeek = id; renderAll(); } // newWeek: erzeugt über zwei prompt-Dialoge eine neue leere Sitzung (Bezeichnung // und Datum). Die neue Woche übernimmt die globale Personenliste der Abteilung, @@ -82,7 +84,11 @@ function applyAutoLock(){ const sorted = [...db.weeks].sort((a,b) => weekSortKey(a.label).localeCompare(weekSortKey(b.label))); const latestId = sorted[sorted.length - 1].id; db.weeks.forEach(w => { + const wasLocked = !!w.locked; w.locked = (w.id !== latestId); + // Nur tatsächlich geänderte Lock-Zustände übertragen (beim bloßen Laden + // sind die Werte identisch und es wird nichts gesendet). + if(wasLocked !== w.locked) markWeekDirty(w.label); }); } diff --git a/server.js b/server.js index 807f933..08fd241 100644 --- a/server.js +++ b/server.js @@ -18,11 +18,17 @@ * * Standardport ist 3003, überschreibbar über die Umgebungsvariable PORT. * Endpunkte: GET /, GET /health, GET /load-all, POST /save-week, POST /save-people, - * POST /delete-week. Ungültige Abteilungen fallen auf ELT zurück. + * POST /delete-week, GET /export-csv (ZIP mit CSV je logischer Entität je Abteilung), + * GET /backup (SQLite-Snapshot als .db-Download; zusätzlich automatische Backups + * nach sessions/backups/ beim Serverstart), POST /import (Backup-Wiederherstellung, + * roher Binär-Body, schema-validiert). + * Ungültige Abteilungen fallen auf ELT zurück. */ const express = require('express'); const fs = require('fs'); const path = require('path'); +const os = require('os'); +const zlib = require('zlib'); const { DatabaseSync } = require('node:sqlite'); const app = express(); @@ -54,6 +60,7 @@ const DB_PATH = process.env.DB_PATH ? path.resolve(process.env.DB_PATH) : path.j const db = new DatabaseSync(DB_PATH); db.exec('PRAGMA journal_mode = WAL;'); db.exec('PRAGMA foreign_keys = ON;'); +db.exec('PRAGMA busy_timeout = 5000;'); // 5 s warten statt SQLITE_BUSY-Fehlern bei parallelen Schreibern // ---------- Schema (voll relational normalisiert) ---------- @@ -76,6 +83,7 @@ db.exec(`CREATE TABLE IF NOT EXISTS weeks ( week_id TEXT NOT NULL DEFAULT '', date TEXT NOT NULL DEFAULT '', locked INTEGER NOT NULL DEFAULT 0, + updated_at TEXT NOT NULL DEFAULT '', PRIMARY KEY (department, label) )`); db.exec(`CREATE TABLE IF NOT EXISTS week_people ( @@ -253,9 +261,10 @@ function hasLegacyWeeksTable(){ // serializeWeek). Ersetzt alle Zeilen der Woche. function serializeWeek(department, week){ const weekLabel = String(week.label || ''); - const upsertWeek = db.prepare(`INSERT INTO weeks (department, label, week_id, date, locked) VALUES (?, ?, ?, ?, ?) - ON CONFLICT(department, label) DO UPDATE SET week_id = excluded.week_id, date = excluded.date, locked = excluded.locked`); - upsertWeek.run(department, weekLabel, String(week.id || ''), String(week.date || ''), week.locked ? 1 : 0); + const nowIso = new Date().toISOString(); // Revision: wird bei jedem Speichern aktualisiert + const upsertWeek = db.prepare(`INSERT INTO weeks (department, label, week_id, date, locked, updated_at) VALUES (?, ?, ?, ?, ?, ?) + ON CONFLICT(department, label) DO UPDATE SET week_id = excluded.week_id, date = excluded.date, locked = excluded.locked, updated_at = excluded.updated_at`); + upsertWeek.run(department, weekLabel, String(week.id || ''), String(week.date || ''), week.locked ? 1 : 0, nowIso); const insWeekPerson = db.prepare(`INSERT INTO week_people (department, week_label, person_id, name, full_name, array_order) VALUES (?, ?, ?, ?, ?, ?)`); @@ -339,6 +348,8 @@ function serializeWeek(department, week){ }); } }); + // Rückgabe der Revision für den Aufrufer (saveWeekRelational -> Route) + return nowIso; } // deleteWeekData: entfernt alle relationalen Zeilen einer Woche (Abteilung + Label) @@ -354,14 +365,18 @@ function deleteWeekData(department, weekLabel){ db.prepare('DELETE FROM weeks WHERE department = ? AND label = ?').run(department, weekLabel); } -// saveWeekRelational: speichert eine Woche vollständig relational (Transaktion) +// saveWeekRelational: speichert eine Woche vollständig relational (Transaktion). +// Rückgabe: die neu gesetzte Revision `updated_at` (ISO-Zeitstempel), damit der +// Client seine lokale Basis aktualisieren kann (sonst würde er beim nächsten +// Speichern einen falschen Konflikt mit sich selbst melden). function saveWeekRelational(department, week){ const weekLabel = String(week.label || ''); const tx = db.exec('BEGIN'); try { deleteWeekData(department, weekLabel); - serializeWeek(department, week); + const updatedAt = serializeWeek(department, week); db.exec('COMMIT'); + return updatedAt; } catch(err){ db.exec('ROLLBACK'); throw err; @@ -551,10 +566,463 @@ function loadWeeks(department){ return { id: w.week_id, label: w.label, date: w.date, people, projects: weekProjects, attendance: att, locked: !!w.locked, + updatedAt: w.updated_at || '', }; }); } +// ---------- CSV-/ZIP-Export ---------- +// +// GET /export-csv?department= liefert einen ZIP, der pro logischer +// Entität eine übersichtliche CSV-Datei enthält (Wochen, Personen, Projekte, +// Zuordnungen, Leistungsphasen, Pläne/TODOs/Meilensteine). Zielgruppe ist vor +// allem Excel; deshalb sind die CSVs UTF-8 mit BOM, CRLF-Zeilenenden und +// Semikolon als Trenner (MS-Excel-de standardmäßig). Das Trennzeichen lässt +// sich über das Query-Parameter `sep` übersteuern (z. B. `?sep=,`). + +// CSV_TABLE: CRC32-Prüftabelle für den ZIP-Build (ZIP verlangt pro Datei eine +// CRC32-Summe; zlib.crc32 existiert erst ab neueren Node-Versionen, daher hier +// manuell). +const CSV_TABLE = (() => { + const t = new Uint32Array(256); + for(let n = 0; n < 256; n++){ + let c = n; + for(let k = 0; k < 8; k++) c = (c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1); + t[n] = c; + } + return t; +})(); + +function crc32(buf){ + let c = 0xFFFFFFFF; + for(let i = 0; i < buf.length; i++) c = CSV_TABLE[(c ^ buf[i]) & 0xFF] ^ (c >>> 8); + return (c ^ 0xFFFFFFFF) >>> 0; +} + +// dosDateTime: kodiert einen Zeitpunkt als DOS-Datum/-Uhrzeit (FAT-Format des +// ZIP-Headers). Rückgabe: {time, date}. +function dosDateTime(d){ + const time = (d.getHours() << 11) | (d.getMinutes() << 5) | Math.floor(d.getSeconds() / 2); + const date = ((d.getFullYear() - 1980) << 9) | ((d.getMonth() + 1) << 5) | d.getDate(); + return { time, date }; +} + +// buildZip: packt mehrere Dateien ohne externe Bibliothek in ein ZIP-Archiv +// (Deflate-Kompression, UTF-8-Dateinamen). Parameter: files = Array von +// {name, data}, wobei data Buffer oder String ist. Rückgabe: Buffer. +function buildZip(files){ + const localParts = []; + const centralParts = []; + let offset = 0; + files.forEach(f => { + const nameBuf = Buffer.from(f.name, 'utf8'); + const raw = Buffer.isBuffer(f.data) ? f.data : Buffer.from(f.data, 'utf8'); + const compressed = zlib.deflateRawSync(raw); + const crc = crc32(raw); + const dt = dosDateTime(new Date()); + const csize = compressed.length; + const usize = raw.length; + const nlen = nameBuf.length; + + // Lokaler Datei-Header (30 Byte) + Name + Daten + const lh = Buffer.alloc(30); + lh.writeUInt32LE(0x04034b50, 0); + lh.writeUInt16LE(20, 4); // Version benötigt + lh.writeUInt16LE(0x0800, 6); // Flag: UTF-8-Namen + lh.writeUInt16LE(8, 8); // Methode: Deflate + lh.writeUInt16LE(dt.time, 10); + lh.writeUInt16LE(dt.date, 12); + lh.writeUInt32LE(crc, 14); + lh.writeUInt32LE(csize, 18); + lh.writeUInt32LE(usize, 22); + lh.writeUInt16LE(nlen, 26); + lh.writeUInt16LE(0, 28); // Extra-Länge + const local = Buffer.concat([lh, nameBuf, compressed]); + localParts.push(local); + + // Zentralverzeichnis-Eintrag (46 Byte) + Name + const ch = Buffer.alloc(46); + ch.writeUInt32LE(0x02014b50, 0); + ch.writeUInt16LE(20, 4); // Version erstellt + ch.writeUInt16LE(20, 6); // Version benötigt + ch.writeUInt16LE(0x0800, 8); + ch.writeUInt16LE(8, 10); + ch.writeUInt16LE(dt.time, 12); + ch.writeUInt16LE(dt.date, 14); + ch.writeUInt32LE(crc, 16); + ch.writeUInt32LE(csize, 20); + ch.writeUInt32LE(usize, 24); + ch.writeUInt16LE(nlen, 28); + ch.writeUInt16LE(0, 30); // Extra + ch.writeUInt16LE(0, 32); // Kommentar + ch.writeUInt16LE(0, 34); // Datenträger + ch.writeUInt16LE(0, 36); // Interne Attribute + ch.writeUInt32LE(0, 38); // Externe Attribute + ch.writeUInt32LE(offset, 42); // Offset des lokalen Headers + centralParts.push(Buffer.concat([ch, nameBuf])); + offset += local.length; + }); + + const centralBuf = Buffer.concat(centralParts); + const end = Buffer.alloc(22); + end.writeUInt32LE(0x06054b50, 0); + end.writeUInt16LE(0, 4); // Datenträger + end.writeUInt16LE(0, 6); // Datenträger mit CD + end.writeUInt16LE(files.length, 8); // Einträge auf Datenträger + end.writeUInt16LE(files.length, 10); // Einträge gesamt + end.writeUInt32LE(centralBuf.length, 12); + end.writeUInt32LE(offset, 16); + end.writeUInt16LE(0, 20); // Kommentarlänge + return Buffer.concat([...localParts, centralBuf, end]); +} + +// CSV_SEP: Trennzeichen der Export-CSVs. Standard Semikolon, damit die Dateien +// in der deutschen Excel-Version direkt sauber öffnen; über `?sep=` übersteuerbar. +let CSV_SEP = ';'; + +// csvCell: escaped eine Zelle für CSV (Anführungszeichen verdoppeln, Zellen +// mit Trenner/Quote/Zeilenumbruch in Anführungszeichen setzen). +function csvCell(v){ + const s = v === undefined || v === null ? '' : String(v); + if(s.includes(CSV_SEP) || s.includes('"') || s.includes('\n') || s.includes('\r')){ + return '"' + s.replace(/"/g, '""') + '"'; + } + return s; +} + +// csvFile: erzeugt aus Spaltenüberschriften (headers) und Zeilen (rows, je +// Array von Werten) eine fertige CSV-Datei-Beschreibung {name, data} für den +// ZIP-Build. Daten werden mit BOM + CRLF (Excel-kompatibel) erzeugt. +// name: Dateiname inkl. Unterordner (z. B. "ELT/projekte.csv"). +function csvFile(name, headers, rows){ + const lines = [csvRow(headers)]; + rows.forEach(r => lines.push(csvRow(r))); + return { name, data: '\uFEFF' + lines.join('') }; +} + +// csvRow: eine CSV-Zeile als String (inkl. Zeilenende CRLF). +function csvRow(values){ + return (values || []).map(csvCell).join(CSV_SEP) + '\r\n'; +} + +// csvStatusText: reduziert ein Status-HTML-Feld auf reinen Text für CSV +// (
/

/

werden zu Zeilenumbrüchen, alle übrigen Tags entfernt). +function csvStatusText(html){ + if(!html) return ''; + return String(html) + .replace(//gi, '\n') + .replace(/<\/(p|div)>/gi, '\n') + .replace(/<[^>]+>/g, '') + .replace(/\u00A0/g, ' ') + .replace(/\n{3,}/g, '\n\n') + .trim(); +} + +// personNameById: Namen der Wochen-Personen nachschlagen (Kurzname bevorzugt). +function weekPersonName(week, id){ + const p = (week.people || []).find(e => e.id === id); + return p ? (p.name || p.fullName || id) : id; +} + +// buildExportCsvs: erzeugt alle CSV-Dateien für eine Abteilung auf Basis der +// auch fürs Frontend verwendeten Deserialisierer (loadWeeks/loadGlobalPeople). +// Rückgabe: Array von {name, data} für buildZip. +function buildExportCsvs(department){ + const weeks = loadWeeks(department); + const people = loadGlobalPeople(department); + const dir = department + '/'; + const files = []; + + // 1) Wochen + files.push(csvFile(dir + 'wochen.csv', + ['Abteilung', 'Woche (KW)', 'ID', 'Datum', 'Gesperrt'], + weeks.map(w => [department, w.label || '', String(w.id || ''), w.date || '', w.locked ? 'Ja' : 'Nein']))); + + // 2) Globale Personen + files.push(csvFile(dir + 'personen.csv', + ['Abteilung', 'Kürzel', 'Voller Name', 'E-Mail', 'Rollen', 'Abwesenheiten'], + people.map(p => [ + department, p.name || '', p.fullName || '', p.email || '', + Array.isArray(p.role) ? p.role.join(', ') : '', + Array.isArray(p.absences) ? p.absences.join(', ') : '', + ]))); + + // 3) Sitzungsteilnehmer inkl. Anwesenheit + const teilnehmer = []; + weeks.forEach(w => { + (w.people || []).forEach(p => { + const att = w.attendance || {}; + teilnehmer.push([ + w.label || '', p.name || '', p.fullName || '', + Array.isArray(p.role) ? p.role.join(', ') : '', + att[p.id] === undefined ? '' : (att[p.id] ? 'Ja' : 'Nein'), + ]); + }); + }); + files.push(csvFile(dir + 'sitzungsteilnehmer.csv', + ['Woche (KW)', 'Kürzel', 'Voller Name', 'Rollen', 'Anwesend'], + teilnehmer)); + + // 4) Projekte + files.push(csvFile(dir + 'projekte.csv', + ['Woche (KW)', 'Projekt-Nr.', 'Bezeichnung', 'Gruppe', 'Reihenfolge', 'Status'], + weeks.flatMap(w => (w.projects || []).map(p => [ + w.label || '', p.nr || '', p.name || '', p.group || '', + typeof p.order === 'number' ? p.order : '', csvStatusText(p.status), + ])))); + + // 5) Projekt-Zuordnungen (Haupt/Optional je Person/Rolle) + const zuordnungen = []; + weeks.forEach(w => { + (w.projects || []).forEach(p => { + Object.keys(p.assign || {}).forEach(aKey => { + const sep = aKey.indexOf('|'); + const pid = sep >= 0 ? aKey.slice(0, sep) : aKey; + const role = sep >= 0 ? aKey.slice(sep + 1) : ''; + const state = Number(p.assign[aKey]) || 0; + zuordnungen.push([ + w.label || '', p.nr || '', p.name || '', weekPersonName(w, pid), role, + state === 1 ? 'Haupt' : state === 2 ? 'Optional' : String(state), + ]); + }); + }); + }); + files.push(csvFile(dir + 'zuordnungen.csv', + ['Woche (KW)', 'Projekt-Nr.', 'Bezeichnung', 'Kürzel', 'Rolle', 'Art'], + zuordnungen)); + + // 6) Leistungsphasen (Fortschrittswerte je Projekt/LPH) + const lphRows = []; + weeks.forEach(w => { + (w.projects || []).forEach(p => { + (p.lph || {}) && Object.keys(p.lph || {}).forEach(l => + lphRows.push([w.label || '', p.nr || '', p.name || '', l, p.lph[l]])); + }); + }); + files.push(csvFile(dir + 'leistungsphasen.csv', + ['Woche (KW)', 'Projekt-Nr.', 'Bezeichnung', 'Leistungsphase', 'Wert'], + lphRows)); + + // 7) Aktuelle Leistungsphasen je Projekt + const aktLpRows = []; + weeks.forEach(w => { + (w.projects || []).forEach(p => { + (Array.isArray(p.aktuelleLP) ? p.aktuelleLP : []).forEach(l => + aktLpRows.push([w.label || '', p.nr || '', p.name || '', l])); + }); + }); + files.push(csvFile(dir + 'aktuelle-leistungsphasen.csv', + ['Woche (KW)', 'Projekt-Nr.', 'Bezeichnung', 'Leistungsphase'], + aktLpRows)); + + // 8) Aufwand je Leistungsphase/Rolle (Gewichtungsfaktoren) + const aufwandRows = []; + weeks.forEach(w => { + (w.projects || []).forEach(p => { + (p.aufwandProLP || {}) && Object.keys(p.aufwandProLP || {}).forEach(l => { + Object.keys(p.aufwandProLP[l] || {}).forEach(role => + aufwandRows.push([w.label || '', p.nr || '', p.name || '', l, role, p.aufwandProLP[l][role]])); + }); + }); + }); + files.push(csvFile(dir + 'aufwand-je-leistungsphase.csv', + ['Woche (KW)', 'Projekt-Nr.', 'Bezeichnung', 'Leistungsphase', 'Rolle', 'Faktor'], + aufwandRows)); + + // 9) Projektpläne (GANTT-Kopf) + const planRows = []; + weeks.forEach(w => { + (w.projects || []).forEach(p => { + const plan = p.plan; + if(!plan) return; + planRows.push([ + w.label || '', p.nr || '', p.name || '', plan.start || '', plan.end || '', + Number(plan.progress) || 0, + (plan.people || []).map(pid => weekPersonName(w, pid)).join(', '), + ]); + }); + }); + files.push(csvFile(dir + 'projektplaene.csv', + ['Woche (KW)', 'Projekt-Nr.', 'Bezeichnung', 'Start', 'Ende', 'Fortschritt (%)', 'Beteiligte'], + planRows)); + + // 10) TODOs der Projektpläne (Zuständige und Abhängigkeiten als lesbare Namen) + const todoRows = []; + weeks.forEach(w => { + (w.projects || []).forEach(p => { + const plan = p.plan; + if(!plan || !Array.isArray(plan.todos)) return; + const titleById = {}; + (plan.todos || []).forEach(t => { titleById[t.id] = t.title; }); + (plan.milestones || []).forEach(m => { titleById[m.id] = m.name; }); + (plan.todos || []).forEach(t => { + todoRows.push([ + w.label || '', p.nr || '', p.name || '', t.title || '', t.start || '', + t.end || '', t.done ? 'Ja' : 'Nein', Number(t.progress) || 0, + (t.assignees || []).map(pid => weekPersonName(w, pid)).join(', '), + (t.dependsOn || []).map(did => titleById[did] || did).join(', '), + ]); + }); + }); + }); + files.push(csvFile(dir + 'todos.csv', + ['Woche (KW)', 'Projekt-Nr.', 'Bezeichnung', 'TODO', 'Start', 'Ende', 'Erledigt', 'Fortschritt (%)', 'Zuständige', 'Hängt ab von'], + todoRows)); + + // 11) Meilensteine der Projektpläne + const msRows = []; + weeks.forEach(w => { + (w.projects || []).forEach(p => { + const plan = p.plan; + if(!plan || !Array.isArray(plan.milestones)) return; + const titleById = {}; + (plan.todos || []).forEach(t => { titleById[t.id] = t.title; }); + (plan.milestones || []).forEach(m => { titleById[m.id] = m.name; }); + (plan.milestones || []).forEach(m => { + msRows.push([ + w.label || '', p.nr || '', p.name || '', m.name || '', m.date || '', + m.position || '', + (m.dependsOn || []).map(did => titleById[did] || did).join(', '), + ]); + }); + }); + }); + files.push(csvFile(dir + 'meilensteine.csv', + ['Woche (KW)', 'Projekt-Nr.', 'Bezeichnung', 'Meilenstein', 'Datum', 'Position', 'Hängt ab von'], + msRows)); + + return files; +} + +// ---------- Datenbank-Backup (Ergänzung zum CSV-Export) ---------- +// +// Zwei Wege: (1) Beim Serverstart wird automatisch eine Kopie der SQLite-DB +// als zeitgestempelte Datei in sessions/backups/ abgelegt (nur die letzten +// MAX_BACKUPS werden behalten). (2) GET /backup liefert einen konsistenten +// Snapshot der DB als herunterladbare .db-Datei (z. B. über den Button +// "DB Backup" im Menü der Hauptseite). Beide nutzen `VACUUM INTO`, das auch +// bei aktivem WAL-Mode eine konsistente Einzeldatei erzeugt (WAL-Inhalte +// werden einbezogen). + +// BACKUP_DIR: Zielordner der automatischen Backups (sessions/backups, Docker- +// bind-mounted → bleibt persistent). +const BACKUP_DIR = path.join(SESSIONS_DIR, 'backups'); +// MAX_BACKUPS: Anzahl der automatisch behaltenen Backups (Älteste werden verworfen) +const MAX_BACKUPS = 10; + +// createDbSnapshot: erzeugt einen konsistenten Snapshot der SQLite-DB in die +// angegebene Zieldatei (VACUUM INTO; funktioniert auch bei WAL-Mode). +function createDbSnapshot(targetPath){ + const quoted = String(targetPath).replace(/'/g, "''"); + db.exec(`VACUUM INTO '${quoted}'`); +} + +// runAutoBackup: legt ein zeitgestempeltes Backup in BACKUP_DIR ab und +// verwirft ältere, sobald MAX_BACKUPS überschritten ist. Fehler werden nur +// geloggt (Backup darf den Serverstart nicht verhindern). +function runAutoBackup(){ + try { + if(!fs.existsSync(BACKUP_DIR)) fs.mkdirSync(BACKUP_DIR, { recursive: true }); + // Zeitstempel mit Millisekunden, damit auch zwei Backups innerhalb einer + // Sekunde (z. B. direkt nach dem Import) eindeutige Dateinamen erhalten. + const base = 'projektuebersicht_' + new Date().toISOString().replace(/[:.]/g, '-').slice(0, 23); + let file = path.join(BACKUP_DIR, base + '.db'); + let suffix = 1; + while(fs.existsSync(file)) file = path.join(BACKUP_DIR, base + '-' + (suffix++) + '.db'); + createDbSnapshot(file); + console.log('Datenbank-Backup erstellt:', file); + + // Nur die letzten MAX_BACKUPS behalten + const backups = fs.readdirSync(BACKUP_DIR) + .filter(f => /^projektuebersicht_.+\.db$/.test(f)) + .map(f => ({ name: f, mtime: fs.statSync(path.join(BACKUP_DIR, f)).mtimeMs })) + .sort((a, b) => b.mtime - a.mtime); + backups.slice(MAX_BACKUPS).forEach(b => { + fs.unlinkSync(path.join(BACKUP_DIR, b.name)); + }); + } catch(err){ + console.error('Automatisches Backup fehlgeschlagen:', err.message); + } +} + +// ---------- Datenbank-Import (Wiederherstellung aus Backup) ---------- +// +// POST /import nimmt eine mit "DB Backup" erzeugte .db-Datei als rohen +// Binär-Body entgegen, validiert das Schema und ersetzt den gesamten +// Datenbestand der laufenden Datenbank durch den Inhalt der Backup-Datei. +// Das Aufspielen erfolgt per ATTACH + DELETE/INSERT-SELECT in einer +// Transaktion: Die Live-Verbindung bleibt stabil, bei Fehlern wird +// zurückgerollt. Vor dem Import wird der Zustand vor dem Import als frisches +// Backup gesichert (runAutoBackup), damit er rückgängig gemacht werden kann. + +// IMPORT_TABLES: alle Tabellen des relationalen Schemas; Grundlage für +// Validierung, Löschvorgang und Datentransfer. Die Reihenfolge ist ohne +// Bedeutung, da das Schema keine Foreign-Key-Constraints deklariert. +const IMPORT_TABLES = ['weeks','week_people','week_people_roles','attendance','projects', + 'project_lph','project_assign','project_aufwand','project_aktuelle_lp', + 'project_plan','plan_people','plan_todos','plan_todo_assignees','plan_todo_deps', + 'plan_milestones','plan_milestone_deps','people','person_roles','person_absences']; + +// dbTableColumns: liefert die Spaltennamen einer Tabelle (funktioniert gegen +// jede DatabaseSync-Instanz, auch read-only Backups) via pragma_table_info. +function dbTableColumns(conn, table){ + return conn.prepare('SELECT name FROM pragma_table_info(?)').all(table).map(r => r.name); +} + +// IMPORT_OPTIONAL_COLS: Spalten, die in älteren Backups fehlen dürfen (sie +// werden beim Import mit dem Default-Wert der Live-Tabelle neu belegt). +const IMPORT_OPTIONAL_COLS = ['updated_at']; + +// restoreDbFromBackup: validiert die Backup-Datei (muss das bekannte Schema +// mit identischen Spalten wie die Live-DB besitzen) und ersetzt den +// Datenbestand der Live-DB durch den Snapshot. Parameter: backupPath (Pfad). +// Wirft bei ungültigem Schema oder Transferfehler (Transaktion wird gerollt). +function restoreDbFromBackup(backupPath){ + const backupConn = new DatabaseSync(backupPath, { readOnly: true }); + try { + // 1) Schema-Validierung: Tabelle muss existieren und jede Spalte der + // Live-DB (außer den als optional markierten) enthalten. Zusätzliche + // Spalten im Backup (z. B. aus einer neueren Version) werden ignoriert. + for(const t of IMPORT_TABLES){ + const liveCols = dbTableColumns(db, t); + const backCols = dbTableColumns(backupConn, t); + if(liveCols.length === 0) throw new Error('Live-Schema defekt (Tabelle fehlt): ' + t); + if(backCols.length === 0) throw new Error('Ungültiges Backup (Tabelle fehlt): ' + t); + const missing = liveCols.filter(c => !backCols.includes(c) && !IMPORT_OPTIONAL_COLS.includes(c)); + if(missing.length > 0) throw new Error('Backup-Schema passt nicht zur Live-DB (Tabelle ' + t + ', fehlt: ' + missing.join(', ') + ')'); + } + + // 2) Datentransfer: Backup anbinden, Bestand löschen, Snapshot übernehmen. + db.exec(`ATTACH DATABASE '${String(backupPath).replace(/'/g, "''")}' AS import_backup`); + db.exec('BEGIN'); + try { + IMPORT_TABLES.forEach(t => db.exec('DELETE FROM ' + t)); + for(const t of IMPORT_TABLES){ + const liveCols = dbTableColumns(db, t); + const backCols = dbTableColumns(backupConn, t); + // Nur Spalten übertragen, die BEIDE Schemas enthalten (alte Backups + // ohne updated_at bleiben so importierbar). + const common = liveCols.filter(c => backCols.includes(c)); + // Anführungszeichen um jede Spalte: `projects` enthält die + // SQL-Schlüsselwort-Spalte "group", die sonst einen Syntaxfehler wirft. + const quoted = common.map(c => '"' + c + '"').join(', '); + const marks = common.map(() => '?').join(', '); + const rows = backupConn.prepare('SELECT ' + quoted + ' FROM ' + t).all(); + const ins = db.prepare('INSERT INTO ' + t + ' (' + quoted + ') VALUES (' + marks + ')'); + rows.forEach(r => ins.run(...common.map(c => r[c]))); + } + db.exec('COMMIT'); + } catch(err){ + db.exec('ROLLBACK'); + throw err; + } finally { + db.exec('DETACH DATABASE import_backup'); + } + } finally { + backupConn.close(); + } +} + // ---------- Migration: altes Ein-Dokument-Format -> relationales Schema ---------- // migrateLegacySchema: überführt eine bestehende Datenbank aus dem alten Format @@ -589,6 +1057,7 @@ function migrateLegacySchema(){ db.exec(`CREATE TABLE IF NOT EXISTS weeks ( department TEXT NOT NULL, label TEXT NOT NULL, week_id TEXT NOT NULL DEFAULT '', date TEXT NOT NULL DEFAULT '', locked INTEGER NOT NULL DEFAULT 0, + updated_at TEXT NOT NULL DEFAULT '', PRIMARY KEY (department, label) )`); db.exec(`CREATE TABLE IF NOT EXISTS week_people ( @@ -717,18 +1186,64 @@ function migrateLegacySchema(){ } } +// migrateWeeksUpdatedAt: ergänzt die `updated_at`-Spalte in bestehenden +// relationalen Datenbanken (idempotent; neue DBs haben die Spalte bereits). +function migrateWeeksUpdatedAt(){ + const cols = db.prepare("SELECT name FROM pragma_table_info('weeks')").all().map(r => r.name); + if(!cols.includes('updated_at')){ + db.exec("ALTER TABLE weeks ADD COLUMN updated_at TEXT NOT NULL DEFAULT ''"); + console.log('Wochen-Tabelle um updated_at ergänzt.'); + } +} + // Migration beim Serverstart ausführen migrateLegacySchema(); +migrateWeeksUpdatedAt(); // Route: Speichert eine komplette Woche (als JSON-Objekt) für eine Abteilung app.post('/save-week', (req, res) => { - const { department, week } = req.body || {}; + const { department, week, baseUpdatedAt } = req.body || {}; if(!week || typeof week.label !== 'string' || !week.label) return res.status(400).json({ ok: false, error: 'Missing week or label' }); const dept = departmentKey(department); try { - saveWeekRelational(dept, week); + // Revisions-/Konflikt-Check: Mit `baseUpdatedAt` meldet der Client die + // Version, auf der seine lokalen Daten beruhen. Ist die Woche auf dem + // Server zwischenzeitlich von jemand anderem gespeichert worden, wird + // NICHT überschrieben, sondern ein Konflikt gemeldet (HTTP 409). + // Wichtig: Auch eine leere Basis (updated_at='' direkt nach der Migration) + // wird geprüft – nur Clients OHNE baseUpdatedAt-Feld (alte Versionen) + // überspringen die Prüfung. Der Check läuft synchron vor dem Schreiben, + // daher gibt es im Prozess keine Race-Condition zwischen Prüfung und + // Transaktion. + if(typeof baseUpdatedAt === 'string'){ + const row = db.prepare('SELECT updated_at FROM weeks WHERE department = ? AND label = ?').get(dept, String(week.label)); + if(row){ + if(baseUpdatedAt !== row.updated_at){ + return res.status(409).json({ + ok: false, + conflict: true, + error: 'Die Sitzung "' + week.label + '" wurde zwischenzeitlich von einer anderen Person geändert.', + updatedAt: row.updated_at + }); + } + } else if(baseUpdatedAt !== ''){ + // Die Woche existiert am Server nicht mehr (vermutlich gelöscht). Ein + // Save mit nicht-leerer, also älterer Revision darf eine gelöschte + // Sitzung nicht wiederbeleben; nur neue Wochen (leere/fehlende Basis) + // dürfen angelegt werden. + return res.status(409).json({ + ok: false, + conflict: true, + error: 'Die Sitzung "' + week.label + '" wurde zwischenzeitlich gelöscht.', + updatedAt: '' + }); + } + } + // `updatedAt` zurückgeben, damit der Client seine lokale Revisions-Basis + // aktualisieren kann (verhindert falsche Eigen-Konflikte beim nächsten Save). + const updatedAt = saveWeekRelational(dept, week); console.log('Saved week:', dept + ' / ' + week.label); - return res.json({ ok: true }); + return res.json({ ok: true, updatedAt: updatedAt || new Date().toISOString() }); } catch(err){ console.error('Save week error', err); return res.status(500).json({ ok: false, error: String(err) }); @@ -782,6 +1297,74 @@ app.get('/load-all', (req, res) => { } }); +// Route: CSV-Export. Erzeugt einen ZIP mit einer übersichtlichen CSV je +// logischer Entität (Wochen, Personen, Sitzungsteilnehmer, Projekte, +// Zuordnungen, Leistungsphasen, Pläne/TODOs/Meilensteine) der angegebenen +// Abteilung. Das Trennzeichen kann über `?sep=` gesetzt werden (Standard: ';'). +app.get('/export-csv', (req, res) => { + try { + const dept = departmentKey(req.query.department); + const sep = String(req.query.sep || ';'); + CSV_SEP = (sep.length === 1) ? sep : ';'; + const files = buildExportCsvs(dept); + const zip = buildZip(files); + const filename = 'Projektuebersicht_' + dept + '_' + new Date().toISOString().slice(0,10) + '.zip'; + res.setHeader('Content-Type', 'application/zip'); + res.setHeader('Content-Disposition', 'attachment; filename="' + filename + '"'); + res.setHeader('Content-Length', String(zip.length)); + res.send(zip); + console.log('CSV-Export:', dept, '(' + files.length + ' Dateien, ' + zip.length + ' Bytes)'); + } catch(err){ + console.error('CSV-Export fehlgeschlagen:', err); + if(!res.headersSent) res.status(500).json({ ok: false, error: String(err) }); + } +}); + +// Route: DB-Snapshot-Download. Erzeugt einen konsistenten Snapshot der +// SQLite-Datenbank (auch mit WAL) und stellt ihn als .db-Datei zum Download +// bereit (Backup für Archivierung/Wiederherstellung, z. B. per "DB Backup"- +// Button im Menü). Die temporäre Datei wird nach dem Senden gelöscht. +app.get('/backup', (req, res) => { + const tmp = path.join(os.tmpdir(), 'projektuebersicht_backup_' + Date.now() + '.db'); + try { + createDbSnapshot(tmp); + const filename = 'projektuebersicht_backup_' + new Date().toISOString().slice(0, 10) + '.db'; + res.download(tmp, filename, () => fs.unlink(tmp, () => {})); + console.log('DB-Backup-Download:', filename); + } catch(err){ + console.error('DB-Backup fehlgeschlagen:', err); + fs.unlink(tmp, () => {}); + if(!res.headersSent) res.status(500).json({ ok: false, error: String(err) }); + } +}); + +// Route: DB-Import (Backup-Wiederherstellung). Erwartet eine .db-Datei aus +// GET /backup bzw. "DB Backup" als rohen Binär-Body (application/octet-stream); +// validiert das Schema und ersetzt den gesamten Datenbestand. VOR dem Import +// wird der Zustand vor dem Import als frisches Backup gesichert, damit ein +// versehentlicher Restore rückgängig gemacht werden kann. +app.post('/import', express.raw({ type: '*/*', limit: '100mb' }), (req, res) => { + const buf = req.body; + if(!Buffer.isBuffer(buf) || buf.length === 0){ + return res.status(400).json({ ok: false, error: 'Keine Datei empfangen' }); + } + const tmp = path.join(os.tmpdir(), 'projektuebersicht_import_' + Date.now() + '.db'); + try { + fs.writeFileSync(tmp, buf); + // Zustand VOR dem Restore sichern (danach wäre der Snapshot bereits der + // importierte Stand und die Wiederherstellung unmöglich). + runAutoBackup(); + restoreDbFromBackup(tmp); + console.log('Datenbank aus Backup wiederhergestellt (' + buf.length + ' Bytes)'); + return res.json({ ok: true }); + } catch(err){ + console.error('Datenbank-Import fehlgeschlagen:', err); + if(!res.headersSent) res.status(500).json({ ok: false, error: String(err && err.message ? err.message : err) }); + } finally { + fs.unlink(tmp, () => {}); + } +}); + // Route: Healthcheck-Endpunkt für Docker/Überwachung app.get('/health', (req,res)=> res.json({ok:true})); @@ -819,7 +1402,11 @@ app.get('/:department/Projektplan/:projName', (req, res) => { }); // Serverstart mit Fehlerbehandlung (z.B. Port bereits belegt) -const server = app.listen(PORT, ()=> console.log(`Projektübersicht server running on http://localhost:${PORT}`)); +const server = app.listen(PORT, () => { + console.log(`Projektübersicht server running on http://localhost:${PORT}`); + // Automatisches Datenbank-Backup beim Start (session/backups/, letzte MAX_BACKUPS) + runAutoBackup(); +}); server.on('error', (err) => { console.error('Server konnte nicht starten:', err.message); if(err.code === 'EADDRINUSE'){ diff --git a/sessions/backups/projektuebersicht_2026-08-18T06-36-48-511.db b/sessions/backups/projektuebersicht_2026-08-18T06-36-48-511.db new file mode 100644 index 0000000000000000000000000000000000000000..f7fff1e41bab30d59e1e6d0d6e19290e1f472994 GIT binary patch literal 212992 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 literal 0 HcmV?d00001 diff --git a/sessions/backups/projektuebersicht_2026-08-18T06-41-14-950.db b/sessions/backups/projektuebersicht_2026-08-18T06-41-14-950.db new file mode 100644 index 0000000000000000000000000000000000000000..7095fdcddee926c6c12d1a7f116874d43eb11ba2 GIT binary patch literal 212992 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 yY0P!VcFui!o(+4V%D-CZxcvr^cjBf1 literal 0 HcmV?d00001 diff --git a/sessions/backups/projektuebersicht_2026-08-18T06-43-13-525.db b/sessions/backups/projektuebersicht_2026-08-18T06-43-13-525.db new file mode 100644 index 0000000000000000000000000000000000000000..7095fdcddee926c6c12d1a7f116874d43eb11ba2 GIT binary patch literal 212992 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 E50G6RmH+?% literal 0 HcmV?d00001