diff --git a/documentation.md b/documentation.md new file mode 100644 index 0000000..600ca1b --- /dev/null +++ b/documentation.md @@ -0,0 +1,78 @@ +# Raceplaner Anwendung + +Dies ist eine Flask-Anwendung zur Planung und Verwaltung von Rennstrategien. Sie ermöglicht die Konfiguration von Rennen, die Verwaltung von Fahrern und die Erstellung von Stint-Plänen, die auch als PDFs exportiert werden können. + +## Struktur + +Die Anwendung besteht hauptsächlich aus der Datei `app/main.py`, die folgende Hauptkomponenten enthält: + +* **Flask App-Instanz**: Initialisiert die Flask-Anwendung. +* **Konfiguration**: Enthält Einstellungen für die Datenbank (SQLite), den geheimen Schlüssel für Sessions und die Dauer von Remember-Me-Cookies. +* **Datenbank (SQLAlchemy)**: Definiert die Modelle für `User`, `Driver`, `Stint` und `RaceConfig`. + * `User`: Für die Benutzerauthentifizierung. + * `Driver`: Speichert Informationen über die Fahrer, wie Name, Startnummer, Verbrauch und Rundenzeiten. + * `Stint`: Definiert die einzelnen Fahrabschnitte im Rennen und weist sie Fahrern zu. + * `RaceConfig`: Speichert globale Rennparameter wie Tankkapazität, Renndauer und Pit-Stop-Zeiten. +* **Login Manager (Flask-Login)**: Verwaltet die Benutzeranmeldung und -abmeldung. +* **Szenario-Verwaltung**: Speichert und lädt Rennszenarien im JSON-Format. +* **Routen**: Definiert die verschiedenen Endpunkte der Webanwendung: + * `/`: Startseite, zeigt Rennkonfiguration und Zeitpläne an. + * `/update_config`: Aktualisiert die Rennkonfiguration. + * `/add_driver`, `/update_driver/`, `/delete_driver/`: CRUD-Operationen für Fahrer. + * `/update_stint_driver`, `/reorder_stints`: Aktualisiert Fahrer in Stints und ordnet Stints neu an. + * `/undo/`: Macht Änderungen an Stints rückgängig. + * `/generate_schedule/`: Generiert einen automatischen Stint-Plan. + * `/save_scenario`, `/load_scenario`: Speichert und lädt Rennszenarien. + * `/export/car/`, `/export/driver/`: Exportiert Zeitpläne als PDF. + * `/driver/`: Zeigt Details und Stints für einen bestimmten Fahrer an. + * `/login`, `/logout`: Benutzerauthentifizierung. + +## Installation und Ausführung + +1. **Voraussetzungen**: + * Python 3.x + * pip (Python-Paketmanager) + * Docker und Docker Compose (für die Bereitstellung in einer Container-Umgebung) + +2. **Abhängigkeiten installieren**: + ```bash + pip install -r requirements.txt + ``` + +3. **Datenbank-Migrationen anwenden** (falls noch nicht geschehen): + ```bash + flask db upgrade + ``` + +4. **Anwendung starten**: + ```bash + python app/main.py + ``` + Die Anwendung ist dann unter `http://127.0.0.1:5000` erreichbar. + +## Docker-Bereitstellung + +Die Anwendung kann auch mit Docker und Docker Compose bereitgestellt werden. Die `Dockerfile` und `docker-compose.yml` Dateien im Root-Verzeichnis definieren die Container-Umgebung. + +Zum Starten der Anwendung mit Docker Compose: + +```bash +docker-compose up --build +``` + +Die Anwendung ist dann auf Port 80 erreichbar (konfiguriert über Nginx). + +## Benutzerauthentifizierung + +Standard-Benutzername: `mscaltenbach` +Standard-Passwort: `SendIt123!` + +## Verbesserungsvorschläge + +Um die Wartbarkeit und Skalierbarkeit der Anwendung zu verbessern, könnte man folgende Maßnahmen in Betracht ziehen: + +* **Modulare Struktur**: Aufteilung der `app/main.py`-Datei in kleinere, logische Module (z.B. `routes.py`, `models.py`, `services.py`) zur besseren Organisation und Trennung der Verantwortlichkeiten. +* **Blueprints**: Verwendung von Flask Blueprints zur Gruppierung verwandter Routen und Ansichten, was die Strukturierung größerer Anwendungen vereinfacht. +* **Fehlerbehandlung**: Erweiterte Fehlerbehandlung und Logging, um Probleme in der Produktion besser identifizieren und beheben zu können. +* **Frontend-Verbesserungen**: Einsatz eines Frontend-Frameworks (z.B. React, Vue.js) für eine dynamischere Benutzeroberfläche und eine bessere Trennung von Frontend und Backend. +* **Tests**: Implementierung von Unit- und Integrationstests, um die Funktionalität der Anwendung sicherzustellen und Regressionen zu vermeiden.