2.5 KiB
Executable File
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 derinvoice_contactfür den Verein, und Sarah, Tim und Lisa sindguest). - Auch Rechnungen können somit direkt an die Entität
Groupausgestellt werden, da die Firmen-/Vereinsadresse in deren Traits liegt, anstatt an einer einzelnen Person zu kleben.