# 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.