Init: RoggioApp Architecture, Prisma Schema, API MVP
This commit is contained in:
+82
@@ -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.
|
||||
Reference in New Issue
Block a user