From 5ba5a99e0216b554a902834d59952ddcfe115b82 Mon Sep 17 00:00:00 2001 From: patrick Date: Thu, 3 Sep 2026 00:03:06 +0200 Subject: [PATCH] docs: README erstellt, Debian statt Ubuntu korrigiert MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit README.md war leer (0 Zeilen). Projektübersicht, Setup, Deploy-Workflow ergänzt. Server läuft tatsächlich auf Debian 13, nicht Ubuntu. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_015Ahyx6D3r7G1EuAc42nezn --- README.md | 61 +++++++++++++++++++++++++++++++++++++++++++++++++ setup_server.sh | 2 +- 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e69de29..032bf77 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,61 @@ +# TimeMaster + +Zeiterfassung & HR-Tool (Zeiterfassung, Abwesenheiten, Kiosk-Terminals, Reports) – DSGVO-konform, EU-Server. Multimandantenfähig mit strikter Company-Isolation über PostgreSQL Row-Level-Security. + +## Tech-Stack + +- **Backend**: Python 3.12 · FastAPI · SQLAlchemy (async) · PostgreSQL 16 · Redis 7 · Alembic +- **Frontend**: React 18 · TypeScript · Tailwind CSS · Vite +- **Deployment**: nativ auf Ubuntu (systemd + nginx), kein Docker +- **Tests**: pytest + pytest-asyncio + pytest-cov + +## Features (Auszug) + +- Zeiterfassung mit ArbZG-Prüfung (Pausen, Höchstarbeitszeit, Ruhezeiten) +- Abwesenheiten: Urlaub (mit Pro-rata/Teilzeit-Anspruch), Krankmeldung (Bradford-Faktor), Zwei-Stufen-Genehmigung +- Kiosk-Terminals: Ed25519-signierte PC-Terminals, NFC+PIN, QR-Code-BYOD-Stempeln +- 2FA (TOTP), LDAP-Sync, CalDAV-Export, iCal-Abo-Feed +- Reports & Exports: CSV/XLSX/PDF, DATEV-Monatsblatt für Steuerberater +- Reseller/Mandantenverwaltung, Audit-Log, DSGVO-Datenexport (Art. 15) + Löschkonzept + +## API-Dokumentation + +Vollständige Endpunkt-Referenz: [`docs/api.md`](docs/api.md). Interaktive Swagger-UI (`/docs`) und ReDoc (`/redoc`) sind nur im Development-Modus aktiv, nicht in Production. + +## Setup + +Migrationen und Tests laufen nicht lokal, sondern auf dem Zielserver (kein lokales Postgres/Redis vorausgesetzt). + +**Server-Neueinrichtung** (Debian 13, als root): + +```bash +bash setup_server.sh +``` + +Installiert Postgres, Redis, nginx, Python-venv, führt Alembic-Migrationen aus und schreibt die nginx-Konfiguration. Danach `.env` mit echten Secrets befüllen. + +**Frontend deployen** (von einem Rechner mit Node.js, nach dem Server-Setup): + +```bash +./push-frontend.sh +``` + +Baut das Frontend (`npm run build`) und synct `dist/` zum Server. + +## Deployment-Workflow (bestehender Server) + +Server pullen git-basiert aus dem eigenen Remote, kein direktes Hochladen von Code: + +```bash +git push origin main # lokal +ssh root@ 'cd /opt/timemaster && ./server-update.sh' # git pull → alembic → restart → health-check +``` + +## Tests + +```bash +cd backend +pytest -q +``` + +Läuft gegen eine echte PostgreSQL-Testdatenbank (RLS-Policies werden in `conftest.py` repliziert), kein SQLite. Coverage-Gate: `--cov-fail-under=50` in `pytest.ini`. diff --git a/setup_server.sh b/setup_server.sh index 7793193..4ee794b 100644 --- a/setup_server.sh +++ b/setup_server.sh @@ -1,6 +1,6 @@ #!/bin/bash # ============================================================ -# TimeMaster – Nativer Server-Setup (Ubuntu 22.04 / 24.04) +# TimeMaster – Nativer Server-Setup (Debian 13) # Führe dieses Script als root oder mit sudo aus # ============================================================ set -e