Files
raceplaner/README.md

4.0 KiB

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/<int:id>, /delete_driver/<int:id>: CRUD-Operationen für Fahrer.
    • /update_stint_driver, /reorder_stints: Aktualisiert Fahrer in Stints und ordnet Stints neu an.
    • /undo/<int:car_num>: Macht Änderungen an Stints rückgängig.
    • /generate_schedule/<int:car_num>: Generiert einen automatischen Stint-Plan.
    • /save_scenario, /load_scenario: Speichert und lädt Rennszenarien.
    • /export/car/<int:car_num>, /export/driver/<int:driver_id>: Exportiert Zeitpläne als PDF.
    • /driver/<int:id>: 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:

    pip install -r requirements.txt
    
  3. Datenbank-Migrationen anwenden (falls noch nicht geschehen):

    flask db upgrade
    
  4. Anwendung starten:

    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:

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.