API updadte

This commit is contained in:
2025-11-08 22:51:35 +01:00
parent 0fb028d19a
commit c0c346a9ed
10 changed files with 526 additions and 108 deletions

134
README.md
View File

@@ -98,6 +98,8 @@ Die vollständige API-Dokumentation mit allen Endpunkten, Beispielen und interak
Wichtigste Endpunkte:
- **Immobilien**: `/api/immobilies` (GET, POST, PATCH, DELETE)
- **Benutzer**: `/api/users` (GET, POST, PUT, DELETE)
- **Bundesländer**: `/api/bundeslands` (GET, POST, PUT, DELETE)
- **Heizungstypen**: `/api/heizungstyps` (GET, POST, PUT, DELETE)
## Datenbank-Schema
@@ -111,6 +113,30 @@ Wichtigste Endpunkte:
| role | ENUM | Benutzerrolle (user, admin, moderator) |
| created_at | DATETIME | Erstellungsdatum |
### Bundesland-Tabelle
| Feld | Typ | Beschreibung |
|------|-----|--------------|
| id | INT | Primärschlüssel (Auto-Increment) |
| name | VARCHAR(100) | Name des Bundeslandes (Unique) |
| grunderwerbsteuer | DECIMAL(4,2) | Grunderwerbsteuer in Prozent |
**Grunderwerbsteuer-Sätze (Stand 2025):**
- Baden-Württemberg, Bremen, Niedersachsen, Rheinland-Pfalz, Sachsen-Anhalt, Thüringen: 5,0%
- Bayern: 3,5%
- Hamburg, Sachsen: 5,5%
- Berlin, Hessen, Mecklenburg-Vorpommern: 6,0%
- Brandenburg, Nordrhein-Westfalen, Saarland, Schleswig-Holstein: 6,5%
### Heizungstyp-Tabelle
| Feld | Typ | Beschreibung |
|------|-----|--------------|
| id | INT | Primärschlüssel (Auto-Increment) |
| name | VARCHAR(100) | Name des Heizungstyps (Unique) |
**Beispiele:** Gasheizung, Wärmepumpe, Ölheizung, Fernwärme, etc.
### Immobilien-Tabelle
| Feld | Typ | Beschreibung |
@@ -118,25 +144,27 @@ Wichtigste Endpunkte:
| id | INT | Primärschlüssel (Auto-Increment) |
| verwalter_id | INT | Foreign Key zu User (Verwalter der Immobilie) |
| adresse | VARCHAR(255) | Vollständige Adresse (5-255 Zeichen) |
| preis | DECIMAL | Kaufpreis oder Miete |
| flaeche | DECIMAL | Wohnfläche in m² |
| wohnflaeche | INT | Wohnfläche in m² (ganze Zahl) |
| nutzflaeche | INT | Nutzfläche in m² (ganze Zahl) |
| garage | BOOLEAN | Hat Garage? (Standard: false) |
| zimmer | INT | Anzahl Zimmer (> 0) |
| baujahr | INT | Baujahr (1800-2100, optional) |
| typ | ENUM | Immobilientyp (wohnung, haus, grundstueck, gewerbe, buero) |
| beschreibung | TEXT | Freitextbeschreibung (optional) |
| verfuegbar | BOOLEAN | Verfügbarkeit (Standard: true) |
| balkon_flaeche | INT | Balkonfläche in m² (optional) |
| keller_flaeche | INT | Kellerfläche in m² (optional) |
| etage | INT | Stockwerk (optional) |
| heizungstyp | VARCHAR(255) | Art der Heizung (optional) |
| nebenkosten | DECIMAL | Monatliche Nebenkosten (optional) |
| etage | INT | Stockwerk (0-10, optional) |
| heizungstyp_id | INT | Foreign Key zu Heizungstyp (optional) |
| abschreibungszeit | INT | Abschreibungszeit in Jahren (0-100, optional) |
| bundesland_id | INT | Foreign Key zu Bundesland (optional) |
| kaufpreis | INT | Kaufpreis in Euro (ganze Zahl, optional) |
| created_at | DATETIME | Erstellungsdatum |
| updated_at | DATETIME | Letzte Aktualisierung |
**Berechnete Felder (nicht in DB gespeichert):**
- `preis_pro_qm`: Preis / Fläche
- `gesamtflaeche`: Fläche + Balkon + Keller
- `gesamtflaeche`: Wohnfläche + Nutzfläche
- `kaufnebenkosten`: Objekt mit Notar, Grundbuch, Grunderwerbsteuer und Gesamtsumme
- Notarkosten: ca. 1,5% des Kaufpreises
- Grundbuchkosten: ca. 0,5% des Kaufpreises
- Grunderwerbsteuer: abhängig vom Bundesland (3,5% - 6,5%)
## Entwicklung
@@ -444,8 +472,49 @@ curl -H "Accept: application/ld+json" http://localhost:8080/api/users
| PUT | `/api/users/{id}` | User vollständig ersetzen |
| DELETE | `/api/users/{id}` | User löschen |
#### Bundesland-Endpunkte
| Methode | Endpoint | Beschreibung |
|---------|----------|--------------|
| GET | `/api/bundeslands` | Alle Bundesländer abrufen (mit Pagination) |
| GET | `/api/bundeslands/{id}` | Einzelnes Bundesland abrufen |
| POST | `/api/bundeslands` | Neues Bundesland erstellen |
| PUT | `/api/bundeslands/{id}` | Bundesland vollständig ersetzen |
| DELETE | `/api/bundeslands/{id}` | Bundesland löschen |
#### Heizungstyp-Endpunkte
| Methode | Endpoint | Beschreibung |
|---------|----------|--------------|
| GET | `/api/heizungstyps` | Alle Heizungstypen abrufen (mit Pagination) |
| GET | `/api/heizungstyps/{id}` | Einzelnen Heizungstyp abrufen |
| POST | `/api/heizungstyps` | Neuen Heizungstyp erstellen |
| PUT | `/api/heizungstyps/{id}` | Heizungstyp vollständig ersetzen |
| DELETE | `/api/heizungstyps/{id}` | Heizungstyp löschen |
### Beispiele
#### Bundesland erstellen
```bash
curl -X POST http://localhost:8080/api/bundeslands \
-H "Content-Type: application/json" \
-d '{
"name": "Bayern",
"grunderwerbsteuer": 3.5
}'
```
#### Heizungstyp erstellen
```bash
curl -X POST http://localhost:8080/api/heizungstyps \
-H "Content-Type: application/json" \
-d '{
"name": "Wärmepumpe"
}'
```
#### Immobilie erstellen
```bash
@@ -454,13 +523,17 @@ curl -X POST http://localhost:8080/api/immobilies \
-d '{
"verwalter": "/api/users/1",
"adresse": "Hauptstraße 123, 12345 Musterstadt",
"preis": "250000",
"flaeche": "85.5",
"wohnflaeche": 85,
"nutzflaeche": 15,
"zimmer": 3,
"typ": "wohnung",
"garage": true,
"balkonFlaeche": 8,
"baujahr": 2020
"baujahr": 2020,
"heizungstyp": "/api/heizungstyps/1",
"bundesland": "/api/bundeslands/1",
"kaufpreis": 350000,
"abschreibungszeit": 50,
"etage": 3
}'
```
@@ -492,8 +565,9 @@ curl http://localhost:8080/api/immobilies?page=2
curl -X PATCH http://localhost:8080/api/immobilies/1 \
-H "Content-Type: application/merge-patch+json" \
-d '{
"preis": "260000",
"verfuegbar": false
"wohnflaeche": 90,
"kaufpreis": 360000,
"heizungstyp": "/api/heizungstyps/2"
}'
```
@@ -501,11 +575,35 @@ curl -X PATCH http://localhost:8080/api/immobilies/1 \
Die Immobilien-Entity bietet automatisch berechnete Felder:
- **preisProQm**: Berechnet automatisch den Preis pro Quadratmeter
- **gesamtflaeche**: Summiert Wohnfläche + Balkonfläche + Kellerfläche
- **gesamtflaeche**: Berechnet die Gesamtfläche (Wohnfläche + Nutzfläche)
- **kaufnebenkosten**: Berechnet die Kaufnebenkosten basierend auf Kaufpreis und Bundesland
- Enthält: Notarkosten (1,5%), Grundbuchkosten (0,5%), Grunderwerbsteuer (abhängig vom Bundesland) und Gesamtsumme
Diese Felder sind schreibgeschützt (read-only) und werden automatisch bei jeder Abfrage berechnet.
### Enums
Die API verwendet folgende Enums:
**ImmobilienTyp:**
- `wohnung` - Wohnung
- `haus` - Haus
- `grundstueck` - Grundstück
- `gewerbe` - Gewerbe
- `buero` - Büro
**UserRole:**
- `user` - Benutzer
- `admin` - Administrator
- `moderator` - Moderator
### Relationen
**Bundesland und Heizungstyp** sind eigene Entities, die über Foreign Keys mit Immobilien verknüpft sind:
- Bei der Erstellung einer Immobilie muss eine IRI verwendet werden (z.B. `/api/bundeslands/1`)
- Diese Entities können über ihre eigenen Endpunkte verwaltet werden
- Bundesländer enthalten die Grunderwerbsteuer-Sätze für die Kaufnebenkosten-Berechnung
### Hydra-Unterstützung
Bei Verwendung des JSON-LD Formats (Standard) bietet die API Hydra-Unterstützung: