# Tschunk Order API Eine RESTful API für Tschunk-Bestellungen, entwickelt mit FastAPI. ## Features - Bestellungen mit mehreren Getränken erstellen - Alle Bestellungen abrufen - Spezifische Bestellungen löschen - Unterstützung für verschiedene Tschunk-Varianten - Wahl zwischen Flora Mate und Club Mate - Mengenangabe für jedes Getränk (Standard: 1) - Anmerkungen und Sonderwünsche für jedes Getränk ## Verfügbare Getränke - **Tschunk** - **Tschunk Hannover-Mische** - **Tschunk alkoholfreier Rum** - **Virgin Tschunk** ## Mate-Sorten - **Flora Mate** - **Club Mate** ## Installation ### Voraussetzungen - Python 3.8+ installiert ### Setup 1. **Virtuelles Environment erstellen und aktivieren:** ```bash cd backend # Virtuelles Environment erstellen python -m venv venv # Virtuelles Environment aktivieren # Unter Linux/macOS: source venv/bin/activate # Unter Windows: # venv\Scripts\activate ``` 2. **Abhängigkeiten installieren:** ```bash pip install -r requirements.txt ``` ## Verwendung ### Server starten ```bash # Stelle sicher, dass das virtuelle Environment aktiviert ist source venv/bin/activate # Linux/macOS # venv\Scripts\activate # Windows # Server starten python main.py ``` Oder mit uvicorn: ```bash uvicorn main:app --reload ``` Der Server läuft dann auf `http://localhost:8000` ### API-Dokumentation Die automatisch generierte API-Dokumentation ist verfügbar unter: - Swagger UI: `http://localhost:8000/docs` - ReDoc: `http://localhost:8000/redoc` ## API-Endpunkte ### 1. Bestellung erstellen ``` POST /orders ``` Beispiel-Request: ```json { "drinks": [ { "drink_type": "Tschunk", "mate_type": "Club Mate", "quantity": 2, "notes": "Bitte extra kalt servieren" }, { "drink_type": "Virgin Tschunk", "mate_type": "Flora Mate", "notes": "Ohne Eiswürfel" }, { "drink_type": "Tschunk Hannover-Mische", "mate_type": "Club Mate", "quantity": 1 } ] } ``` **Hinweise:** - Das `quantity`-Feld ist optional. Falls nicht angegeben, wird automatisch 1 verwendet. - Das `notes`-Feld ist optional und kann für Sonderwünsche oder Anmerkungen verwendet werden (max. 500 Zeichen). ### 2. Alle Bestellungen abrufen ``` GET /orders ``` ### 3. Bestellung löschen ``` DELETE /orders/{order_id} ``` ### 4. Verfügbare Getränke anzeigen ``` GET /drinks ``` ## Beispiel-Verwendung mit curl ### Bestellung erstellen: ```bash curl -X POST "http://localhost:8000/orders" \ -H "Content-Type: application/json" \ -d '{ "drinks": [ { "drink_type": "Tschunk", "mate_type": "Club Mate", "quantity": 3, "notes": "Bitte mit Limettenscheibe garnieren" }, { "drink_type": "Virgin Tschunk", "mate_type": "Flora Mate", "notes": "Allergie gegen Zitrusfrüchte" } ] }' ``` ### Alle Bestellungen abrufen: ```bash curl -X GET "http://localhost:8000/orders" ``` ### Bestellung löschen: ```bash curl -X DELETE "http://localhost:8000/orders/{order_id}" ``` ## Testing Das Projekt enthält ein Test-Skript, das alle API-Endpunkte testet: ```bash # Stelle sicher, dass das virtuelle Environment aktiviert ist source venv/bin/activate # Test-Skript ausführen python test_api.py ``` ## Projektstruktur ``` backend/ ├── main.py # FastAPI-Anwendung ├── models.py # Pydantic-Modelle ├── database.py # In-Memory-Datenbank ├── test_api.py # Test-Skript ├── requirements.txt # Python-Abhängigkeiten ├── .gitignore # Git-Ignore-Datei ├── venv/ # Virtuelles Environment (wird ignoriert) └── README.md # Diese Datei ``` ## Hinweise - **Virtuelles Environment**: Das Projekt verwendet ein virtuelles Environment, um Abhängigkeiten zu isolieren - **In-Memory-Datenbank**: Die API verwendet eine In-Memory-Datenbank, d.h. alle Daten gehen beim Neustart verloren - **Produktionsumgebung**: Für Produktionsumgebungen sollte eine persistente Datenbank verwendet werden - **Validierung**: Die API validiert automatisch alle Eingaben mit Pydantic - **Mengenangabe**: Jedes Getränk kann eine Menge haben (mindestens 1, Standard: 1) - **Anmerkungen**: Jedes Getränk kann optionale Anmerkungen haben (max. 500 Zeichen) ## Troubleshooting ### Virtuelles Environment aktivieren Falls du eine Fehlermeldung bezüglich fehlender Module erhältst, stelle sicher, dass das virtuelle Environment aktiviert ist: ```bash # Status prüfen which python # Sollte auf venv/bin/python zeigen # Falls nicht aktiviert: source venv/bin/activate ``` ### Port bereits belegt Falls Port 8000 bereits belegt ist, kannst du einen anderen Port verwenden: ```bash uvicorn main:app --reload --port 8001 ```