Diese Anwendung ermöglicht die Verwaltung von Immobilien und deren Mietern.
Für die Korrekte Darstellung dieser Readme Page bitte zu GitHub wechseln. Dort gibt es auch die Dokumentation in den Releases und den Docker Container unter packages zum Download.
⚠️ WarnungUnder heavy development
- Java 21
- Backend: Spring Boot
- Komponenten: Spring Data JPA, Spring Web, Spring Dev Tools, und Spring Security
- Database: H2, PostgreSQL
- H2 zur Entwicklung, fürs deployment Postgres
- Frontend: Vaadin
- Build-Tool: Maven
- Tests: JUnit
- Deployment: Docker
Die Mieter-Verwaltung ermöglicht es, Mieter zu erstellen, zu aktualisieren und zu löschen. Jeder Mieter hat mehrere Attribute, darunter Name, Vorname, Telefonnummer, E-Mail und Einkommen. Diese Attribute unterliegen strikten Validierungsregeln:
- Name und Vorname: Dürfen nur Buchstaben und Leerzeichen enthalten und müssen zwischen 1 und 100 Zeichen lang sein.
- Telefonnummer: Muss zwischen 6 und 12 Ziffern enthalten.
- E-Mail: Muss ein gültiges E-Mail-Format haben und eindeutig sein.
- Einkommen: Muss ein positiver Wert sein.
Zusätzlich können Mietern Dokumente und Mietverträge zugeordnet werden.
Mietverträge verknüpfen Mieter mit Wohnungen und enthalten Informationen wie Mietbeginn, Mietende, Miete, Kaution und die Anzahl der Bewohner. Die Validierungen stellen sicher, dass:
- Mietbeginn: Nicht in der Zukunft liegt.
- Mietende: Nach dem Mietbeginn liegt, falls gesetzt.
- Miete und Kaution: Positive Werte sind.
- Anzahl der Bewohner: Mindestens 1 beträgt.
Mietverträge können erstellt, aktualisiert und gelöscht werden, wobei die Beziehungen zu Mietern und Wohnungen berücksichtigt werden.
Wohnungen werden mit verschiedenen Attributen verwaltet, darunter Straße, Hausnummer, Postleitzahl, Stadt, Land, Gesamtquadratmeter, Baujahr, Anzahl der Bäder, Schlafzimmer sowie Ausstattungsmerkmale wie Balkon, Terrasse, Garten und Klimaanlage. Die Validierungen umfassen:
- Straße, Hausnummer, Stadt: Dürfen nicht leer sein und müssen bestimmten Mustern entsprechen.
- Postleitzahl: Muss zwischen 4 und 10 Ziffern enthalten.
- Gesamtquadratmeter: Muss mindestens 1 betragen.
- Baujahr: Muss eine vierstellige Jahreszahl sein und darf nicht in der Zukunft liegen.
- Anzahl der Bäder: Muss positiv sein.
- Anzahl der Schlafzimmer: Muss null oder positiv sein.
Wohnungen können ebenfalls Dokumente und Zählerstände zugeordnet werden.
Dokumente können Mietern oder Wohnungen zugeordnet werden und enthalten Attribute wie Dokumenttyp und Dateipfad. Beide Felder dürfen nicht leer sein und müssen bestimmten Validierungen entsprechen.
Zählerstände sind Wohnungen zugeordnet und enthalten das Ablesedatum und den Ablesewert. Beide Felder müssen gesetzt sein, wobei der Ablesewert positiv sein muss.
Die Anwendung stellt sicher, dass die Beziehungen zwischen Mietern, Mietverträgen, Wohnungen, Dokumenten und Zählerständen korrekt gehandhabt werden. Beispielsweise:
- Ein Mietvertrag muss einem existierenden Mieter und einer existierenden Wohnung zugeordnet sein.
- Dokumente können entweder Mietern oder Wohnungen zugeordnet sein, nicht jedoch beiden gleichzeitig.
Voraussetzungen:
- Docker & Docker Compose muss installiert sein
- dann die Docker compose herunterladen und anpassen
- dann
docker compose up -d
Variable | Beschreibung | Default |
---|---|---|
DB_HOST | Hostname/IP der Datenbank | db |
DB_PORT | Port von Postgres | 5432 |
DB_NAME | Namen der Datenbank | immobilienverwaltung |
DB_USER | Username der Datenbank | myuser |
DB_PASSWORD | Passwort der Datenbank | mypassword |
ADMIN | Admin User Name | admin |
ADMIN_PW | Admin Password | password |
DEMO_MODE | enable loading demo data (true/false) | true |
Click to expand for Screenshots
Click to expand for Database Design
erDiagram
Mieter {
Long mieterId PK
String name
String vorname
String telefonnummer
String email
double einkommen
}
Mietvertrag {
Long mietvertrag_id PK
Long mieterId FK
Long wohnung_id FK
LocalDate mietbeginn
LocalDate mietende
double kaution
double miete
int anzahlBewohner
}
Wohnung {
Long wohnung_id PK
String strasse
String hausnummer
String postleitzahl
String stadt
String land
int gesamtQuadratmeter
int baujahr
int anzahlBaeder
int anzahlSchlafzimmer
boolean hatBalkon
boolean hatTerrasse
boolean hatGarten
boolean hatKlimaanlage
String stockwerk
String wohnungsnummer
Double latitude
Double longitude
}
Dokument {
Long dokument_id PK
Long wohnung_id FK
Long mieter_id FK
String dokumententyp
String dateipfad
}
Zaehlerstand {
Long zaehlerstandId PK
Long wohnung_id FK
LocalDate ablesedatum
double ablesewert
String name
}
Role {
Long id PK
String name
}
User {
Long id PK
String username
String password
Long created_by_admin_id FK
}
UserRole {
Long user_id FK
Long role_id FK
}
Configuration {
String configKey PK
String configValue
}
Mieter ||--o{ Dokument : "hat"
Mieter ||--o{ Mietvertrag : "hat"
Wohnung ||--o{ Mietvertrag : "hat"
Wohnung ||--o{ Dokument : "hat"
Wohnung ||--o{ Zaehlerstand : "hat"
User ||--o{ UserRole : "zugeordnet"
Role ||--o{ UserRole : "zugeordnet"
Voraussetzungen:
- Java 21
- Git
- Maven bzw. Intellij installiert alles andere
Setup: Run/Debug Configuration:
- Spring Boot auswählen
- Modify Options: Add VM Options
- Dort
-Dspring.profiles.active=dev
eingeben, um das Entwicklungsprofil auszuwählen - Modify Options: Add Environment Variable
- Dort
demo_mode=true
eingeben, dass die Demodaten geladen werden
Setup: Database Connection
- Automatisch: Intellij schlägt die Verbindung vor: Nur die H2 verbinden, config wird automatisch übernommen. Die Postgres mit
-
heraus löschen - Manuell: Auf der rechten Seite unter dem Database reiter die Verbindung zur H2 manuell hinzufügen.