Skip to content

timriedlinger/Room-Booking-App

Repository files navigation

🏢 RoomMate - Room & Seat Booking System

Ein modernes und sicheres Raumbuchungssystem, entwickelt mit Spring Boot, im Rahmen des Programmierpraktikum 2 an der Heinrich-Heine-Universität Düsseldorf. Diese Anwendung ermöglicht es Benutzern, sich unkompliziert über ihr GitHub-Konto (OAuth2) anzumelden und gezielt Sitzplätze in verschiedenen Räumen für bestimmte Zeitslots zu buchen. Administratoren können die Räume und Plätze dynamisch verwalten.

✨ Features

  • Sicherer Login: Authentifizierung via GitHub (OAuth2).
  • Rollenbasiertes System: Strikte Trennung zwischen normalen Nutzern (USER) und Administratoren (ADMIN).
  • Buchungssystem: Übersichtliche Buchung von Zeitslots für spezifische Sitzplätze und Räume.
  • Admin-Dashboard: Räume und Plätze dynamisch hinzufügen, bearbeiten oder löschen.
  • Responsive UI: Modernes Frontend mit Thymeleaf und Bootstrap.
  • Datenbanksicherheit: Versteckte Credentials (Umgebungsvariablen) und automatische Tabellen-Migration mit Flyway.

🛠️ Tech Stack

  • Backend: Java 21, Spring Boot 3.x, Spring Security (OAuth2), Spring Data JPA
  • Frontend: Thymeleaf, Bootstrap, HTML5/CSS3
  • Datenbank: PostgreSQL (gesteuert über Flyway)
  • Build-Tool: Gradle
  • Testing: JUnit 5, Mockito, Spring Boot Test (WebMvcTest)
  • Infrastruktur: Docker & Docker Compose

🏗️ Architektur & Design-Muster

Dieses Projekt wurde nach modernen Software-Engineering-Prinzipien entwickelt, um hohe Wartbarkeit, Testbarkeit und eine saubere Code-Struktur zu gewährleisten:

  • Onion Architecture (Layered Architecture): Strikte Trennung der Verantwortlichkeiten in Web-Schicht (Controller), Geschäftslogik (Services) und Infrastruktur/Datenzugriff (DB).
  • Domain-Driven Design (DDD) Ansätze:
    • Das Herzstück der Anwendung bildet die isolierte domain-Schicht mit den fachlichen Entitäten (Aggregates wie Room, Platz, Zeitslot).
    • Repository Pattern: Die Geschäftslogik kommuniziert ausschließlich über Interfaces (domain.repository). Die konkrete Datenbank-Anbindung (db) ist davon entkoppelt, was einen einfachen Austausch der Datenbanktechnologie ermöglicht.
  • Objektorientierte Programmierung (OOP): Konsequente Kapselung von Zuständen innerhalb der Entitäten und Nutzung von Dependency Injection (Inversion of Control) durch das Spring Framework, um Klassen lose gekoppelt und optimal testbar zu machen.

🚀 Lokale Installation (Getting Started)

Um das Projekt lokal auf deinem Rechner laufen zu lassen, hast du zwei Möglichkeiten für die Datenbank:

1. Der schnelle Weg mit Docker (Empfohlen)

Du musst PostgreSQL nicht lokal installieren. Wenn du Docker installiert hast, starte die Datenbank einfach mit einem Befehl:

docker-compose up -d

(Die Datenbank läuft nun isoliert auf Port 5433 mit dem User user und Passwort iamgroot)

Option B: Lokale PostgreSQL Installation Falls du kein Docker nutzt, stelle sicher, dass PostgreSQL lokal läuft und eine leere Datenbank namens postgres auf Port 5433 erreichbar ist.

2. Umgebungsvariablen (Sicherheit)

Bevor du die App startest, musst du folgende Umgebungsvariablen (Environment Variables) in deiner IDE (z.B. in den "Run Configurations" von IntelliJ) oder in deinem Terminal setzen:

# Datenbank-Zugang (Bei Docker-Nutzung: user / iamgroot)
DB_USER=dein_postgres_benutzername
DB_PASSWORD=dein_postgres_passwort

# GitHub OAuth2 Login-Daten
CLIENT_ID=deine_github_oauth_client_id
CLIENT_SECRET=deine_github_oauth_client_secret

3. Anwendung starten

Das Projekt nutzt den Gradle Wrapper, du musst Gradle also nicht einmal global installiert haben. Starte die App direkt über deine IDE oder im Terminal mit folgendem Befehl:

Windows:

gradlew bootRun

Mac/Linux:

./gradlew bootRun

Sobald der Server hochgefahren ist, erreichst du die Anwendung in deinem Browser unter: http://localhost:8080


🧪 Tests ausführen

Das Projekt verfügt über Unit- und Integrationstests (inkl. Mockito und WebMvcTest), um die Geschäftslogik und Security-Regeln zu verifizieren. Starte die Tests mit:

./gradlew test

About

A Spring Boot room and seat booking system with GitHub OAuth2 login, role-based access control, and PostgreSQL integration.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors