Init: RoggioApp Architecture, Prisma Schema, API MVP
This commit is contained in:
+36
@@ -0,0 +1,36 @@
|
||||
# RoggioApp - Personen Entitäten & Nextcloud Sync (OIDC)
|
||||
|
||||
## Das Problem
|
||||
Wir wollen Personen (`Persons`) als zentrale Knoten im Graph (Datenbank) modellieren.
|
||||
Aber die "Wahrheit" über den Login (Passwort, Rollen) soll in der Nextcloud (als Identity Provider) liegen.
|
||||
Stellen wir uns ein Bein, wenn wir in der Datenbank jetzt Personen anlegen, ohne dass die Nextcloud steht?
|
||||
|
||||
## Die Lösung: Entkopplung von "Identity" und "Profile"
|
||||
Wir trennen das Konzept "Wer bist du technisch?" von "Wer bist du in der realen Welt?".
|
||||
|
||||
### 1. Das Roggio-Profil (Die Person-Entität)
|
||||
In unserer Postgres-DB (Prisma) liegt das Modell `Person`.
|
||||
Dieses Modell enthält **nur Profil- und Geschäftsdaten**:
|
||||
* `firstName`, `lastName`, `phone`
|
||||
* `traits` (JSONB) für alles andere (Körpergröße für Leihräder, Essensvorlieben für Gruppen).
|
||||
* **Der Anker:** Ein Feld `ssoId` (Single-Sign-On ID).
|
||||
|
||||
### 2. Die Nextcloud-Identität (Der Identity Provider)
|
||||
In der Nextcloud liegen die sensiblen Login-Daten:
|
||||
* `username` (z.B. "sev")
|
||||
* `password` (gehasht)
|
||||
* `email`
|
||||
* `groups` (z.B. "admin", "kollektiv")
|
||||
|
||||
### Der Workflow (Wie beides zusammenspielt)
|
||||
Wir können jetzt sofort Personen in der Datenbank anlegen (z.B. Gäste, die sowieso keinen Nextcloud-Account bekommen).
|
||||
Wenn sich später ein Kollektiv-Mitglied über Nextcloud einloggt (OIDC), passiert folgendes:
|
||||
1. Nextcloud sagt: *"Hier ist User 'sev' mit der OIDC-Sub-ID '12345' und der Email 'sev@...'."*
|
||||
2. Unser Backend schaut in der `Person`-Tabelle nach: *"Habe ich eine Person mit `ssoId = '12345'` oder `email = 'sev@...'`?"*
|
||||
3. Wenn Ja: Die Person ist authentifiziert und das Roggio-Profil wird mit der Sitzung verknüpft.
|
||||
4. Wenn Nein (erster Login): Das Backend erstellt automatisch eine neue `Person` mit der `ssoId='12345'`.
|
||||
|
||||
## Fazit für die Entwicklung
|
||||
Wir können das Datenmodell jetzt zu 100% fertigbauen und verfeinern!
|
||||
Gäste existieren ohnehin nur in Roggio. Für das Kollektiv lassen wir einfach das Feld `ssoId` vorerst leer. Wenn wir Nextcloud anbinden, füllen wir die ID nach oder lassen sie beim ersten Login auto-matchen.
|
||||
Kein Bein gestellt!
|
||||
Reference in New Issue
Block a user