# 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/ # Tische eines Bereichs POST /api/tables/ # Tisch erstellen PUT /api/tables/ # Tisch aktualisieren DELETE /api/tables/ # Tisch löschen ``` ### Reservierungen ``` GET /api/reservations # Alle Reservierungen POST /api/reservations # Reservierung erstellen PUT /api/reservations/ # Reservierung aktualisieren DELETE /api/reservations/ # 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/ # Buchung aktualisieren DELETE /api/room-bookings/ # 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