tschunkorder/backend/README.md

220 lines
No EOL
4.7 KiB
Markdown

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