v2.0: 3-Raum-System - Hauptraum, Saal A, Saal B mit 18 Tischen, Raum-Buchungen, API-Doku
This commit is contained in:
@@ -0,0 +1,237 @@
|
||||
# Reservierungssystem - 3-Raum-Implementierung
|
||||
|
||||
**Datum:** 16. Mai 2026
|
||||
**Version:** 2.0 (3-Raum-System)
|
||||
**Server:** VM251 (192.168.0.251)
|
||||
**URL:** http://192.168.0.251
|
||||
|
||||
---
|
||||
|
||||
## Übersicht
|
||||
|
||||
Reservierungssystem mit Raum- und Tischverwaltung für Restaurant/Event-Betrieb.
|
||||
|
||||
**Features:**
|
||||
- 3 Buchbare Räume mit individuellen Tischplänen
|
||||
- Visuelle Tisch-Auswahl im Grundriss
|
||||
- Raum-Buchung für Veranstaltungen
|
||||
- Automatische Verfügbarkeitsprüfung
|
||||
|
||||
---
|
||||
|
||||
## Architektur
|
||||
|
||||
### Tech-Stack
|
||||
| Komponente | Technologie |
|
||||
|-----------|-------------|
|
||||
| Backend | Python 3.12 + Flask |
|
||||
| Datenbank | SQLite (reservations.db) |
|
||||
| Frontend | Vanilla JS + HTML/CSS |
|
||||
| Webserver | Gunicorn (dev) |
|
||||
| Container | Docker |
|
||||
|
||||
### Netzwerk
|
||||
- Port 80: Web-UI (reservierung-frontend)
|
||||
- Port 8081: API-Direktzugriff (reservation-system)
|
||||
|
||||
---
|
||||
|
||||
## Datenbank-Schema
|
||||
|
||||
### Räume (`rooms`)
|
||||
| Feld | Typ | Beschreibung |
|
||||
|------|-----|--------------|
|
||||
| id | INTEGER PK | Raum-ID |
|
||||
| name | TEXT | Raumname |
|
||||
| capacity | INTEGER | Maximale Kapazität |
|
||||
| color | TEXT | Farbe für UI (#hex) |
|
||||
|
||||
### Bereiche (`areas`)
|
||||
| Feld | Typ | Beschreibung |
|
||||
|------|-----|--------------|
|
||||
| id | INTEGER PK | Bereich-ID |
|
||||
| room_id | INTEGER FK | Zugehöriger Raum |
|
||||
| name | TEXT | Bereichsname |
|
||||
| available_from | TIME | Öffnungszeit |
|
||||
| available_to | TIME | Schließzeit |
|
||||
|
||||
### Tische (`tables`)
|
||||
| Feld | Typ | Beschreibung |
|
||||
|------|-----|--------------|
|
||||
| id | INTEGER PK | Tisch-ID |
|
||||
| area_id | INTEGER FK | Zugehöriger Bereich |
|
||||
| name | TEXT | Tischbezeichnung |
|
||||
| x, y | INTEGER | Position im Grundriss |
|
||||
| width, height | INTEGER | Größe (Pixel) |
|
||||
| shape | TEXT | Form: rect/circle/oval |
|
||||
| seats | INTEGER | Sitzplätze |
|
||||
| is_combinable | BOOLEAN | Kombinierbar |
|
||||
| is_active | BOOLEAN | Aktiv/Inaktiv |
|
||||
|
||||
### Raum-Buchungen (`room_bookings`)
|
||||
| Feld | Typ | Beschreibung |
|
||||
|------|-----|--------------|
|
||||
| id | INTEGER PK | Buchungs-ID |
|
||||
| room_id | INTEGER FK | Gebuchter Raum |
|
||||
| date | DATE | Datum |
|
||||
| time_from | TIME | Startzeit |
|
||||
| time_to | TIME | Endzeit |
|
||||
| event_name | TEXT | Veranstaltung |
|
||||
| status | TEXT | pending/confirmed/cancelled |
|
||||
|
||||
---
|
||||
|
||||
## Konfigurierte Räume
|
||||
|
||||
### Raum 1: Hauptraum
|
||||
- **Kapazität:** 80 Plätze
|
||||
- **Farbe:** #3b82f6 (Blau)
|
||||
- **Tische:** 8
|
||||
- T1-T3: 4er/6er Tische (rect)
|
||||
- T4: 6er Rund (circle)
|
||||
- T5-T6: 4er Tische (rect)
|
||||
- T7: 8er Rund (circle)
|
||||
- T8: 10er Großtisch (rect)
|
||||
|
||||
### Raum 2: Saal A
|
||||
- **Kapazität:** 40 Plätze
|
||||
- **Farbe:** #10b981 (Grün)
|
||||
- **Tische:** 5
|
||||
- A1-A3: 4er Tische (rect)
|
||||
- A4-A5: 6er Tische (rect)
|
||||
|
||||
### Raum 3: Saal B
|
||||
- **Kapazität:** 30 Plätze
|
||||
- **Farbe:** #f59e0b (Orange)
|
||||
- **Tische:** 5
|
||||
- B1-B2: 4er Tische (rect)
|
||||
- B3: 6er Tisch (rect)
|
||||
- B4-B5: 4er Rund (circle)
|
||||
|
||||
---
|
||||
|
||||
## API-Endpunkte
|
||||
|
||||
### Räume
|
||||
```
|
||||
GET /api/rooms # Alle Räume mit Tischen
|
||||
GET /api/rooms-with-bookings # Räume + aktuelle Buchungen
|
||||
```
|
||||
|
||||
### Tische
|
||||
```
|
||||
GET /api/tables/<area_id> # Tische eines Bereichs
|
||||
POST /api/tables/<area_id> # Tisch erstellen
|
||||
PUT /api/tables/<table_id> # Tisch aktualisieren
|
||||
DELETE /api/tables/<table_id> # Tisch löschen
|
||||
```
|
||||
|
||||
### Reservierungen
|
||||
```
|
||||
GET /api/reservations # Alle Reservierungen
|
||||
POST /api/reservations # Reservierung erstellen
|
||||
PUT /api/reservations/<id> # Reservierung aktualisieren
|
||||
DELETE /api/reservations/<id> # Reservierung stornieren
|
||||
POST /api/reservations/check-availability # Verfügbarkeit prüfen
|
||||
```
|
||||
|
||||
### Raum-Buchungen (Events)
|
||||
```
|
||||
GET /api/room-bookings # Alle Raum-Buchungen
|
||||
POST /api/room-bookings # Raum buchen
|
||||
PUT /api/room-bookings/<id> # Buchung aktualisieren
|
||||
DELETE /api/room-bookings/<id> # Buchung stornieren
|
||||
GET /api/room-availability # Raum-Verfügbarkeit
|
||||
```
|
||||
|
||||
### Verfügbarkeit
|
||||
```
|
||||
GET /api/availability?date=YYYY-MM-DD&time_from=HH:MM&time_to=HH:MM
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Deployment
|
||||
|
||||
### Docker-Container
|
||||
```bash
|
||||
# Backend starten
|
||||
docker run -d --name reservation-system \
|
||||
-p 80:8080 \
|
||||
-v reservation-data:/data \
|
||||
--restart unless-stopped \
|
||||
reservierung-system:fixed
|
||||
```
|
||||
|
||||
### Datenbank-Backup
|
||||
```bash
|
||||
# Backup erstellen
|
||||
docker exec reservation-system \
|
||||
cp /data/reservations.db /data/reservations.db.backup-$(date +%Y%m%d)
|
||||
|
||||
# Backup herunterladen
|
||||
docker cp reservation-system:/data/reservations.db.backup-YYYYMMDD ./
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Änderungen (Changelog)
|
||||
|
||||
### v2.0 (16.05.2026)
|
||||
- [x] 3-Raum-System implementiert
|
||||
- [x] Räume: Hauptraum, Saal A, Saal B
|
||||
- [x] 18 Tische mit Positionen und Sitzplätzen
|
||||
- [x] Raum-Buchung für Veranstaltungen
|
||||
- [x] Visuelle Tisch-Auswahl im Grundriss
|
||||
- [x] Verfügbarkeitsprüfung automatisiert
|
||||
- [x] API erweitert: /api/rooms, /api/room-bookings
|
||||
|
||||
### v1.0 (vorher)
|
||||
- Einfaches Tisch-Reservierungssystem
|
||||
- Keine Raum-Zuordnung
|
||||
- Keine Event-Buchungen
|
||||
|
||||
---
|
||||
|
||||
## Zugriff
|
||||
|
||||
**SSH:**
|
||||
```bash
|
||||
ssh root@192.168.0.251
|
||||
# Passwort: qwertzuiOP1!
|
||||
```
|
||||
|
||||
**Web-UI:** http://192.168.0.251
|
||||
|
||||
**API-Test:**
|
||||
```bash
|
||||
curl http://192.168.0.251/api/rooms
|
||||
curl http://192.168.0.251/api/health
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Bekannte Probleme
|
||||
|
||||
- [ ] Frontend-Design könnte professioneller sein
|
||||
- [ ] Keine Benutzer-Authentifizierung (Admin/Mitarbeiter)
|
||||
- [ ] Keine E-Mail-Benachrichtigungen implementiert
|
||||
- [ ] Keine Öffnungszeiten pro Raum konfigurierbar
|
||||
|
||||
---
|
||||
|
||||
## Nächste Schritte
|
||||
|
||||
1. **Frontend-Design verbessern** (professionelles UI)
|
||||
2. **Benutzer-Rollen** einführen (Admin, Mitarbeiter, Gast)
|
||||
3. **E-Mail-Versand** aktivieren
|
||||
4. **Öffnungszeiten pro Raum** konfigurierbar machen
|
||||
5. **Statistiken/Dashboard** erweitern
|
||||
|
||||
---
|
||||
|
||||
## Kontakt
|
||||
|
||||
- **Entwicklung:** Peter (KI-Assistent)
|
||||
- **Server:** X2 (192.168.0.55) / VM251 (192.168.0.251)
|
||||
- **Git:** Committen auf VM251, Push zu Gitea pending
|
||||
Reference in New Issue
Block a user