v2.0: 3-Raum-System - Hauptraum, Saal A, Saal B mit 18 Tischen, Raum-Buchungen, API-Doku

This commit is contained in:
Peter
2026-05-16 12:15:46 +00:00
commit 1ae070f82f
35 changed files with 10640 additions and 0 deletions
+237
View File
@@ -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