CarHub360 ist eine Jakarta-EE/WildFly-REST-Anwendung für Autohandel und Fahrzeugvermietung.
Das Projekt bildet zentrale Prozesse eines Autohauses ab: Kundenverwaltung, Adressen, Fahrzeugbestand, Verkaufsfahrzeuge, Mietfahrzeuge, Kauf- und Mietverträge, Zahlungen, Wartungen und Kundenhistorien. Der Schwerpunkt liegt auf einer nachvollziehbaren Backend-Architektur mit Package-by-Feature-Struktur, REST-API, JPA-Persistenz, fachlicher Validierung, OpenAPI-Dokumentation, Docker-Start und automatisierten Tests.
- Projektziel
- Aktueller Status
- Screenshots
- Features
- Tech-Stack
- Installation / lokaler Start
- Nutzung und API-Beispiele
- Tests
- Projektstruktur
- Roadmap
- Autor
- Lizenz
CarHub360 demonstriert den Aufbau einer strukturierten Java-Backend-Anwendung für ein realistisch abgegrenztes FH- und Portfolio-Projekt. Die Anwendung stellt nicht nur CRUD-Endpunkte bereit, sondern macht fachliche Regeln sichtbar:
- Kunden können angelegt, aktualisiert, gelesen und per Soft Delete deaktiviert werden.
- Fahrzeuge werden als Basismodell, Verkaufsfahrzeuge und Mietfahrzeuge verwaltet.
- Kaufverträge und Mietverträge werden fachlich unterschiedlich validiert.
- Mietfahrzeuge werden beim Abschluss eines Mietvertrags automatisch als nicht verfügbar markiert.
- Zahlungen, Wartungen und Kundenhistorien sind eigenen fachlichen Bereichen zugeordnet.
- Die REST-API ist über Swagger UI testbar und über OpenAPI maschinenlesbar dokumentiert.
| Bereich | Status |
|---|---|
| REST-API | Implementiert |
| Package-by-Feature-Struktur | Implementiert |
| Swagger UI / OpenAPI | Implementiert |
| Docker-Start | Implementiert |
| JPA-Persistenz | Implementiert |
| H2-Demo-Datenbank | Implementiert |
| DTO-basierte Requests und Responses | Implementiert |
| Fachliche Validierung | Implementiert |
| Unit- und Integrationstests | Implementiert |
| GitHub Actions CI | Implementiert |
| Eigenes Web-Frontend | Nicht Bestandteil dieses Projekts |
- Kunden anlegen, lesen, aktualisieren und deaktivieren
- Soft Delete statt physischer Löschung
- eindeutige E-Mail-Adressen
- optionale Adresse direkt beim Kunden
- Kundenhistorie mit Bewertungen und Aktionen
- Basisfahrzeuge verwalten
- Verkaufsfahrzeuge mit Verkaufspreis und Neuwagenstatus verwalten
- Mietfahrzeuge mit Tagespreis, Kennzeichen, Kaution und Verfügbarkeit verwalten
- Kaufverträge für Verkaufsfahrzeuge
- Mietverträge für verfügbare Mietfahrzeuge
- Validierung unterschiedlicher Vertragsarten
- automatische Sperrung eines Mietfahrzeugs bei Mietvertrag
- Freigabe eines Mietfahrzeugs beim Löschen eines Mietvertrags
- Berechnung eines Mietpreises anhand Mietdauer und Tagespreis
- Zahlungen mit Zahlungsart, Zahlungsstatus und Betrag
- Wartungen mit Zeitraum, Beschreibung und Kosten
- Kundenhistorien für Aktionen, Käufe, Mieten und Bewertungen
- Swagger UI für manuelle API-Tests
- OpenAPI JSON für API-Clients und Tools
- JUnit-5-Tests für zentrale Workflows und fachliche Regeln
- JaCoCo-Testreport im Maven-Build
- GitHub-Actions-Pipeline für Tests und Docker-Compose-Validierung
| Kategorie | Technologie |
|---|---|
| Sprache | Java 17 |
| Plattform | Jakarta EE 10 |
| Application Server | WildFly 27 |
| REST | JAX-RS |
| Business Layer | EJB Services |
| Persistenz | JPA / Hibernate 6 |
| Datenbank | H2, über WildFly ExampleDS |
| Validierung | Jakarta Bean Validation, fachliche Validatoren |
| JSON | Jackson |
| API-Dokumentation | OpenAPI / Swagger UI |
| Build | Maven Wrapper |
| Tests | JUnit 5, H2 Test Persistence Unit |
| Coverage | JaCoCo |
| Container | Docker, Docker Compose |
| CI | GitHub Actions |
- Docker Desktop
- Java 17, optional für lokale Maven-Ausführung
- Maven, optional; falls Maven fehlt, nutzen die Wrapper-Skripte Docker
docker compose up --buildDie Anwendung ist danach erreichbar unter:
| Service | URL |
|---|---|
| REST-API Basis | http://localhost:8080/carhub360/api |
| OpenAPI JSON | http://localhost:8080/carhub360/api/openapi.json |
| Swagger UI | http://localhost:8080/carhub360/swagger-ui/ |
docker compose downWindows:
.\mvnw.cmd testLinux/macOS:
sh ./mvnw testNach dem Start kann die API direkt im Browser getestet werden:
http://localhost:8080/carhub360/swagger-ui/
Die OpenAPI-Spezifikation wird hier ausgeliefert:
http://localhost:8080/carhub360/api/openapi.json
curl -X POST "http://localhost:8080/carhub360/api/customers" \
-H "Content-Type: application/json" \
-d '{
"firstName": "Max",
"lastName": "Mustermann",
"email": "max.mustermann@example.com",
"birthdate": "1998-04-12T00:00:00",
"female": false,
"address": {
"city": "Erfurt",
"postalCode": "99084",
"street": "Bahnhofstraße",
"streetNumber": "10"
}
}'curl -X POST "http://localhost:8080/carhub360/api/rent-vehicles" \
-H "Content-Type: application/json" \
-d '{
"name": "ID.3",
"brand": "VW",
"kilometerCount": 5000,
"constructionYear": 2022,
"type": "Electric",
"available": true,
"dailyPrice": 79,
"licensePlate": "EF-CH-360",
"deposit": 500
}'Die IDs müssen zu vorhandenen Datensätzen passen.
curl -X POST "http://localhost:8080/carhub360/api/contracts" \
-H "Content-Type: application/json" \
-d '{
"customerId": 1,
"rentVehicleId": 1,
"rentalContract": true,
"contractDate": "2026-06-28",
"rentalStartDate": "2026-07-01",
"rentalEndDate": "2026-07-05"
}'| Methode | Pfad | Beschreibung |
|---|---|---|
GET |
/api/customers |
aktive Kunden auflisten |
POST |
/api/customers |
Kunden anlegen |
GET |
/api/addresses |
Adressen auflisten |
GET |
/api/vehicles |
Fahrzeuge auflisten |
POST |
/api/vehicles |
Basisfahrzeug anlegen |
GET |
/api/sale-vehicles |
Verkaufsfahrzeuge auflisten |
POST |
/api/sale-vehicles |
Verkaufsfahrzeug anlegen |
GET |
/api/rent-vehicles |
Mietfahrzeuge auflisten |
POST |
/api/rent-vehicles |
Mietfahrzeug anlegen |
GET |
/api/contracts |
Verträge auflisten |
POST |
/api/contracts |
Vertrag anlegen |
GET |
/api/contracts/rental |
Mietverträge auflisten |
GET |
/api/contracts/sale |
Kaufverträge auflisten |
GET |
/api/contracts/{id}/rental-price |
Mietpreis berechnen |
GET |
/api/payments |
Zahlungen auflisten |
POST |
/api/payments |
Zahlung anlegen |
GET |
/api/maintenance |
Wartungen auflisten |
POST |
/api/maintenance |
Wartung anlegen |
GET |
/api/customer-history |
Kundenhistorie auflisten |
POST |
/api/customer-history |
Historieneintrag anlegen |
Die Tests prüfen zentrale Workflows und fachliche Regeln:
- Kunden anlegen, lesen, aktualisieren und per Soft Delete deaktivieren
- doppelte E-Mail-Adressen verhindern
- Kaufvertrag und Mietvertrag fachlich validieren
- Mietfahrzeug bei Vertragsanlage sperren und beim Löschen wieder freigeben
- Zahlungen, Wartungen und Kundenhistorien über Services verarbeiten
- OpenAPI-Registrierung und Swagger-UI-Konfiguration absichern
- Validatoren, Referenz-Services und fachliche Hilfsservices isoliert testen
Testlauf:
.\mvnw.cmd testErwartetes Ergebnis:
BUILD SUCCESS
Die konkrete Testanzahl kann sich mit weiterem Ausbau ändern. Aktuell deckt die Suite die Kernworkflows und ausgelagerten Fachservices ab.
Die GitHub-Actions-Pipeline CI läuft bei push und pull_request.
Sie führt aus:
- Checkout des Repositories
- Java-17-Setup mit Temurin
- Maven-Testlauf über den Projekt-Wrapper mit
sh ./mvnw -B test - Validierung der Docker-Compose-Konfiguration mit
docker compose config
Workflow-Datei:
.github/workflows/ci.yml
Die Anwendung ist nach Package-by-Feature strukturiert. Jede fachliche Domäne enthält ihre Resource-, Service-, Repository-, Entity-, Mapper- und DTO-Bausteine möglichst nah beieinander.
src/main/java/de/fherfurt/carhub360
|-- WebApplication.java
|-- customer
| |-- dto
| |-- address
| |-- history
| |-- Customer.java
| |-- CustomerResource.java
| |-- CustomerService.java
| |-- CustomerRepository.java
| |-- CustomerMapper.java
| |-- CustomerValidator.java
| |-- CustomerReferenceService.java
| |-- CustomerEmailUniquenessService.java
| `-- CustomerProfileUpdater.java
|-- vehicle
| |-- dto
| |-- sale
| |-- rent
| |-- Vehicle.java
| |-- VehicleResource.java
| |-- VehicleService.java
| |-- VehicleRepository.java
| |-- VehicleMapper.java
| |-- VehicleValidator.java
| |-- VehicleReferenceService.java
| `-- VehicleFields.java
|-- contract
| |-- dto
| |-- Contract.java
| |-- ContractResource.java
| |-- ContractService.java
| |-- ContractRepository.java
| |-- ContractMapper.java
| |-- ContractValidator.java
| |-- ContractValidationService.java
| |-- ContractReferenceResolver.java
| |-- ContractRentalVehicleService.java
| |-- ContractPriceCalculator.java
| `-- ContractFactory.java
|-- payment
|-- maintenance
`-- shared
|-- api
|-- dto
`-- validation
Weitere Projektdateien:
CarHub360/
|-- .github/workflows/ci.yml
|-- Dockerfile
|-- docker-compose.yaml
|-- pom.xml
|-- mvnw
|-- mvnw.cmd
|-- docs/screenshots
|-- src/main/resources/META-INF/persistence.xml
|-- src/test/resources/META-INF/persistence.xml
`-- README.md
- REST-API für Kernmodule
- Package-by-Feature-Struktur
- Service- und Repository-Schicht
- DTO-basierte Request-Verarbeitung
- fachliche Validierung in eigenen Services und Validatoren
- OpenAPI/Swagger UI
- Docker-Start über Docker Compose
- automatisierte Tests
- GitHub Actions CI
- Beispiel-Datensätze für Demo-Starts
- produktionsnähere Datenbank, z. B. PostgreSQL
- Datenbankmigrationen mit Flyway oder Liquibase
- Authentifizierung und Rollenmodell
- separates Web-Frontend
Mohammad Taiba
Copyright (c) 2026 Mohammad Taiba. All rights reserved.
This project is published for portfolio and review purposes only. See LICENSE.

