# RoggioApp - Events, Aufgaben & Relationen ## 1. Die Universalität der Entitäten Nicht nur die physische Welt (Räume, Zirkuswagen), sondern **alles** ist eine grundlegende Entität, die über Eigenschaften (Traits) und Verknüpfungen definiert wird. * **Personen als Entitäten:** Können Rollen in Gruppen übernehmen. * **Dynamische Relationen (Verknüpfungen mit Eigenschaften):** Eine Person ist nicht einfach "in" einer Gruppe. Die Verbindung selbst hat eine Eigenschaft! * *Person A* ist über die Eigenschaft `is_comm_contact` mit *Gruppe X* verbunden. * *Person B* ist über die Eigenschaft `is_finance_contact` mit *Gruppe X* verbunden. ## 2. Buchungen und Aufgaben = "Events" Die höchste Form der Abstraktion betrifft die Zeit und die Aktionen. Es gibt keine starren Tabellen für "Buchungen" und "Putzpläne". Beide sind im Kern **Events**. ### Was ist ein Event? Ein Event ist ein Knotenpunkt in der Zeit, der andere Entitäten miteinander verbindet und einen Zustand hat. * **Beispiel A: Die Buchung (Event-Typ: Rental)** * *Eigenschaften des Events:* Zeitraum (14.08 - 21.08), Status (Bestätigt). * *Relation 1:* Verknüpft mit Entität "Gruppe Familie Rossi" (Wer?). * *Relation 2:* Verknüpft mit Entität "Haus A" + "Zirkuswagen" (Wo?). * *Relation 3:* Finanzen/Rechnung (Geld). * **Beispiel B: Das Putzen (Event-Typ: Task/Maintenance)** * *Eigenschaften des Events:* Fälligkeitsfenster (21.08 10:00 - 15:00), Status (Offen). * *Relation 1:* Verknüpft mit Entität "Haus A" (Was muss geputzt werden?). * *Relation 2:* Verknüpft mit Entität "Kollektiv-Mitglied Sarah" (Wer putzt?). * *Spezial-Relation (Event -> Event):* Getriggert durch / Abhängig von "Event A (Buchung Ende)". ## Claras architektonische Ableitung Das gesamte System besteht eigentlich nur aus drei riesigen Säulen: 1. **Nodes (Entitäten):** Die Bausteine der Welt (Personen, Einheiten, etc.). 2. **Edges (Relationen/Traits):** Wie die Nodes verbunden sind und was sie können. 3. **Events (Zeitliche Knoten):** Das Klebeband, das Nodes auf einer Zeitachse zusammenführt (Buchungen, Aufgaben, Wartung). *Herausforderung für die Datenbank:* So etwas baut man idealerweise mit einer Graphendatenbank (wie Neo4j) oder in PostgreSQL mit JSONB-Feldern für die Traits und extrem klugen Pivot-Tabellen (Edge-Tables) für die Beziehungen, damit man nicht den Verstand beim Queries-Schreiben verliert. Wir müssen einen Weg finden, das in Prisma sauber und typsicher zu modellieren, ohne die Performance zu töten.