.. | ||
.gitignore | ||
database.py | ||
main.py | ||
models.py | ||
README.md | ||
requirements.txt | ||
test_api.py |
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
- Virtuelles Environment erstellen und aktivieren:
cd backend
# Virtuelles Environment erstellen
python -m venv venv
# Virtuelles Environment aktivieren
# Unter Linux/macOS:
source venv/bin/activate
# Unter Windows:
# venv\Scripts\activate
- Abhängigkeiten installieren:
pip install -r requirements.txt
Verwendung
Server starten
# 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:
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:
{
"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:
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:
curl -X GET "http://localhost:8000/orders"
Bestellung löschen:
curl -X DELETE "http://localhost:8000/orders/{order_id}"
Testing
Das Projekt enthält ein Test-Skript, das alle API-Endpunkte testet:
# 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:
# 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:
uvicorn main:app --reload --port 8001