Init: RoggioApp Architecture, Prisma Schema, API MVP

This commit is contained in:
Clara Zetkin
2026-04-26 19:42:42 +02:00
commit 193b29e8a9
5256 changed files with 1446953 additions and 0 deletions
+82
View File
@@ -0,0 +1,82 @@
# RoggioApp - Units & Hierarchie (Beispiel: Wohnung im 1. Stock)
## 1. Die Hierarchie (Der Tree)
Die Macht unseres Node-Graphen zeigt sich in der Hierarchie. Wir legen nicht eine fette Zeile in einer Tabelle "Wohnung" an, sondern stapeln Units ineinander (`parentId`).
**Beispiel-Baum:**
* **Unit 1:** Haus A (Parent: Null)
* **Unit 2:** 1. Stock (Parent: Unit 1)
* **Unit 3:** Wohnung Sonnenaufgang (Parent: Unit 2, `is_rentable: true`)
* **Unit 4:** Küche (Parent: Unit 3)
* **Unit 5:** Bad (Parent: Unit 3)
* **Unit 6:** Wohnzimmer (Parent: Unit 3)
* **Unit 7:** Terrasse (Parent: Unit 3)
* **Unit 8:** Schlafzimmer 1 (Parent: Unit 3)
* **Unit 9:** Doppelbett (Parent: Unit 8, `capacity: 2`)
* **Unit 10:** Schlafzimmer 2 (Parent: Unit 3)
* **Unit 11:** Einzelbett A (Parent: Unit 10, `capacity: 1`)
* **Unit 12:** Einzelbett B (Parent: Unit 10, `capacity: 1`)
* **Unit 13:** Schlafzimmer 3 (Parent: Unit 3)
* **Unit 14:** Einzelbett (Parent: Unit 13, `capacity: 1`)
## 2. Die Eigenschaften (Traits im JSONB)
Wie unterscheiden wir nun ein Schlafzimmer von einem Bad, ohne für jedes eine eigene Datenbanktabelle zu bauen? Über das JSONB-Feld `traits`.
**Beispiele für das `traits`-Feld (JSON):**
* **Bei Unit 3 (Wohnung Sonnenaufgang):**
```json
{
"type": "apartment",
"is_rentable": true,
"base_price": 85.00,
"cleaning_fee": 40.00
}
```
*(Hinweis: Fläche und Kapazität stehen hier absichtlich NICHT drin. Sie werden später live aus den Kindern berechnet!)*
* **Bei Unit 8 (Schlafzimmer 1):**
```json
{
"type": "room",
"room_category": "bedroom",
"area_sqm": 18.5,
"features": ["Meerblick", "Verdunkelungsrollos"]
}
```
* **Bei Unit 9 (Doppelbett):**
```json
{
"type": "inventory",
"inventory_category": "bed_double",
"sleep_capacity": 2,
"width_cm": 180
}
```
* **Bei Unit 5 (Bad):**
```json
{
"type": "room",
"room_category": "bathroom",
"area_sqm": 8.0,
"features": ["Dusche", "Badewanne", "Bidet", "Fenster"]
}
```
* **Bei Unit 4 (Küche):**
```json
{
"type": "room",
"room_category": "kitchen",
"area_sqm": 12.0,
"inventory": ["Kühlschrank", "Herd", "Kaffeemaschine", "Töpfe"]
}
```
## 3. Claras Fazit zur Flexibilität
Wir müssen in Postgres nur EINE einzige Tabelle `Unit` abfragen, um das gesamte Gebäude zu kennen.
Wenn jemand wissen will: *"Wie groß ist die Wohnung und wie viele Leute können dort schlafen?"*
Dann fragt unser Backend: *"Summiere alle `area_sqm` von allen Units, deren direkter oder indirekter Parent die 'Wohnung Sonnenaufgang' ist. Und summiere alle `sleep_capacity` der Kinder."*
Ergebnis: Fläche = 38.5qm, Schlafplätze = 5.