238 lines
5.6 KiB
Markdown
238 lines
5.6 KiB
Markdown
# 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
|