Init: RoggioApp Architecture, Prisma Schema, API MVP
This commit is contained in:
+31
@@ -0,0 +1,31 @@
|
||||
# RoggioApp - Das Kollektiv als eigene Entität
|
||||
|
||||
## Die Erkenntnis: Das Kollektiv ist kein abstrakter "Gott", sondern nur eine Gruppe
|
||||
Wenn man konsequent abstrahiert, ist die Betreiber-Struktur (das Kollektiv) nichts anderes als eine ganz normale Entität im Graphen.
|
||||
|
||||
### 1. Das Kollektiv ist eine `Group`
|
||||
In unserer Datenbank-Tabelle `Group` existieren Gruppen für "Familie Rossi" (Gäste).
|
||||
Genau dort existiert auch ein Datensatz für "Das Kollektiv".
|
||||
Unterschieden wird dies nur durch das JSONB-Feld `traits`:
|
||||
* *Familie Rossi:* `{"group_type": "guest", "preferences": "quiet"}`
|
||||
* *Das Kollektiv:* `{"group_type": "operator", "bank_account": "DE123...", "tax_id": "DE999..."}`
|
||||
|
||||
### 2. Die Mitglieder sind `Person`-Entitäten mit Relationen
|
||||
Die Menschen, die das System betreiben (Sev, Sarah, etc.), sind normale `Person`-Einträge.
|
||||
Ihre Zugehörigkeit zum Kollektiv wird durch die reguläre Pivot-Tabelle `GroupMembership` definiert:
|
||||
* *Person ID (Sev)* + *Group ID (Das Kollektiv)* + *Rolle (`finance_admin`)*
|
||||
* *Person ID (Sarah)* + *Group ID (Das Kollektiv)* + *Rolle (`cleaning_crew`)*
|
||||
|
||||
### 3. Warum das absolut genial ist: Mandantenfähigkeit ("Multi-Tenancy")
|
||||
Wenn wir das Kollektiv als einfache Gruppe speichern, ist das System sofort **mandantenfähig**.
|
||||
Beispiel: In 5 Jahren wollt ihr neben dem Haupt-Gelände noch ein zweites Haus im Nachbardorf verwalten, das aber von einer anderen Genossenschaft (oder GmbH) betrieben wird.
|
||||
Wir müssen *keinen einzigen* Datenbankumbau vornehmen! Wir legen einfach eine zweite Operator-Gruppe an, ordnen dieser Gruppe ein paar Personen und die neuen "Units" (Räume) zu, und fertig. Die Rechnungen ziehen sich dann automatisch die Bankdaten von Gruppe B statt von Gruppe A.
|
||||
|
||||
## Fazit
|
||||
Das System kennt keinen "Super-Admin-Hardcode". Es kennt nur den Graphen. Das Kollektiv ist ein normaler Knotenpunkt, der sich über seine Beziehungen definiert.
|
||||
|
||||
### 4. B2B / Firmen als Kunden (Organisationen)
|
||||
Genau wie "Das Kollektiv" eine Operator-Gruppe ist, sind auch B2B-Kunden (Firmen, NGOs, Vereine) einfache Einträge in der Tabelle `Group`.
|
||||
* *Verein e.V.:* `{"group_type": "b2b_guest", "tax_id": "DE123...", "invoice_notes": "Vereinsrabatt"}`
|
||||
* Die Verknüpfung der tatsächlichen Gäste erfolgt wieder über `GroupMembership`. (Z.B. ist Peter der `invoice_contact` für den Verein, und Sarah, Tim und Lisa sind `guest`).
|
||||
* Auch Rechnungen können somit direkt an die Entität `Group` ausgestellt werden, da die Firmen-/Vereinsadresse in deren Traits liegt, anstatt an einer einzelnen Person zu kleben.
|
||||
Reference in New Issue
Block a user