Abschlussprojekt Modul 223 - Multiuser-Applikationen objektorientiert realisieren
Reservationssystem für Sitzungs- und Veranstaltungsräume (Zimmer 101-105) mit vollständiger CRUD-Funktionalität und schlüsselbasierter Zugriffskontrolle.
- ✅ Reservierung erstellen: Formular mit umfassender Validierung
- ✅ Reservierung bearbeiten: Mit Private Key autorisiert
- ✅ Reservierung löschen: Mit Confirmation Dialog
- ✅ Reservierung anzeigen: Public Key (Read-Only) oder Private Key (Full Access)
- 🔐 Public Key: Lesezugriff für Teilnehmer
- 🔑 Private Key: Vollzugriff zum Bearbeiten/Löschen
- 🔒 Kryptographische Schlüsselgenerierung: SecureRandom mit Base64 Encoding
- ✅ Autorisierung: Jeder Edit/Delete Request validiert Private Key
- ✅ Zimmernummer: 101-105
- ✅ Bemerkung: 10-200 Zeichen Pflicht
- ✅ Zeitbereich: Start < End, beide in Zukunft
- ✅ Zimmerkonfliktprüfung: Keine überlappenden Reservierungen
- ✅ Teilnehmer: Nur Buchstaben (inkl. Umlaute) erlaubt
- Java 17+
- Maven 3.6+
Das Projekt enthält eine Docker Compose Konfiguration für eine MySQL Datenbank.
- Docker Desktop oder Docker Engine installiert
- Docker Compose installiert
-
Optional: Umgebungsvariablen setzen (via
.envoder direkt in Compose):- Du kannst eine
.envDatei im Projektroot anlegen, z. B.:MYSQL_ROOT_PASSWORD=rootpassword MYSQL_DATABASE=reservations MYSQL_USER=reservation_user MYSQL_PASSWORD=change-me MYSQL_PORT=3306 - Ohne
.envwerden die indocker-compose.ymlhinterlegten Standardwerte verwendet.
- Du kannst eine
-
Docker Container starten:
docker compose up -d
-
Status prüfen:
docker compose ps docker compose logs mysql
-
Anwendung starten:
./mvnw spring-boot:run
Die Anwendung nutzt die MySQL-Konfiguration aus
application.properties.
- Container stoppen:
docker compose down - Container stoppen und Daten löschen:
docker compose down -v - Logs anzeigen:
docker compose logs -f mysql - MySQL Console öffnen:
docker compose exec mysql mysql -u reservation_user -p reservations
- Host: localhost
- Port: 3306
- Database: reservations
- User: reservation_user
- Password: change-me (änderbar in .env)
- Framework: Spring Boot 3.5.7
- Java Version: 17
- Build Tool: Maven
- Datenbank: MySQL 8.0+ (via Docker Compose) / H2 (In-Memory für Tests)
- Template Engine: Thymeleaf
- Persistenz: Spring Data JPA
- Validierung: Jakarta Bean Validation
- Testing: JUnit 5
M223-Terminkalender/
├── src/
│ ├── main/
│ │ ├── java/com/example/reservations/
│ │ │ ├── model/ # JPA Entities
│ │ │ ├── repository/ # Data Access Layer
│ │ │ ├── service/ # Business Logic
│ │ │ ├── web/ # Controllers
│ │ │ │ └── dto/ # Data Transfer Objects
│ │ │ └── config/ # Configuration
│ │ └── resources/
│ │ ├── templates/ # Thymeleaf Templates
│ │ └── application.properties
│ └── test/
│ └── java/ # Unit Tests (19 Tests)
├── Doku/
│ ├── Projektdokumentation in Markdown.md
│ ├── Projektdokumentation PDF Abgabe.md
│ ├── Projektauftrag.pdf # Projektauftrag (Referenz)
│ ├── diagrams/ # UML Diagramme
│ │ ├── Zustandsdiagramm Bild.png
│ │ ├── Entity-Relationship-Diagramm Bild.png
│ │ └── UML-Klassendiagramm Bild.png
│ └── sql/
│ ├── schema-example.sql
│ └── seed-data-example.sql
├── docker-compose.yml
├── init.sql
├── pom.xml
└── README.md
GET /- Startseite mit ReservationsübersichtGET /access?key={key}- Zugriff per Public/Private KeyGET /reservations/new- Neues ReservationsformularPOST /reservations- Reservation erstellen
GET /reservations/{id}/public- Public View (Read-Only)
GET /reservations/{id}/private?authorized=true&key={privateKey}- Private View (voller Zugriff via Private Key)GET /reservations/{id}/private?code={accessCode}- Private View (eingeschränkter Zugriff via Zugangscode)GET /reservations/{id}/edit?key={privateKey}- Edit FormularPOST /reservations/{id}?key={privateKey}- Reservation aktualisierenPOST /reservations/{id}/delete?key={privateKey}- Reservation löschen
- Navigiere zu http://localhost:8080
- Klicke auf "Create Reservation"
- Fülle das Formular aus:
- Titel, Location, Zimmer (101-105)
- Bemerkung (10-200 Zeichen)
- Startzeit und Endzeit (in der Zukunft)
- Teilnehmer (kommagetrennt)
- Access Type (PUBLIC/PRIVATE)
- Nach Erstellen erhältst du:
- Public Key: Für Teilnehmer
- Private Key: Für dich (Edit/Delete)
Mit Public Key:
- Gib Public Key auf Startseite ein
- Zeigt Read-Only View
Mit Private Key:
- Gib Private Key auf Startseite ein
- Zeigt Management View mit Edit/Delete Buttons
- Öffne Private View mit Private Key
- Klicke "Edit Reservation"
- Ändere Daten im Formular
- Speichere mit "Update Reservation"
- Öffne Private View mit Private Key
- Klicke "Delete Reservation"
- Bestätige im Dialog
- Reservation wird permanent gelöscht
- Ricardo Santos Lopes — Projektleiter
- Mathias Bäumli — Teampartner
- Imad Chatila — Teampartner
Details siehe: Doku/Projektdokumentation_M223_KOMPLETT.md → Abschnitt "10. Projektteam und Mitwirkende"
Projekt für Bildungszwecke im Rahmen des Moduls 223.