- M2-Abschlussstatus und Abschlusskriterien dokumentieren - M3-SaaS-Basisplan mit Tenant/User/Participant-Modell ergänzen - Hauptplan mit M2-Abschluss und M3-Startpunkten aktualisieren
3.6 KiB
3.6 KiB
M3 SaaS-Basis Vorbereitung
Stand: 2026-07-12
M3 fuehrt Mandanten, Benutzer, Mitgliedschaften und Grundeinstellungen additiv ein. Die bestehende Legacy-App bleibt dabei lauffaehig und wird noch nicht auf das neue Modell umgestellt.
Ziel
- Einen Default-Tenant fuer den aktuellen Bestand erzeugen.
- Login-Benutzer und Kaffee-Teilnehmer fachlich trennen.
- Rollen tenant-spezifisch vorbereiten.
- Bestehende
kl_Mitarbeiterohne Datenverlust inparticipantsspiegeln. - Die Grundlage fuer Registrierung und Login schaffen, ohne die Legacy-Auth sofort zu ersetzen.
Nicht-Ziele fuer den ersten M3-Schritt
- Kein kompletter Login-Umbau in einem Schritt.
- Keine Migration von Einzahlungen und Kaffeeverbrauch nach
ledger_entries; das gehoert zu M4. - Kein Design- oder Layout-Umbau.
- Kein Billing, keine Tarife, keine E-Mail-Verifikation im ersten Schritt.
- Kein produktiver Tenant-Wechsel in bestehenden Legacy-Seiten.
Vorgeschlagene Migration
Naechste Migration:
database/migrations/0002_saas_identity_tenants.sql
Tabellen:
tenantstenant_settingsuserstenant_membershipsparticipants
Wichtige Regeln:
userssind Login-Konten.participantssind Kaffeelisten-Teilnehmer.- Ein
participantkann optional auf einenuserzeigen. - Rollen liegen in
tenant_memberships, nicht inparticipants. participants.legacy_mitarbeiter_idspeichert die alte ID auskl_Mitarbeiter.- Geldwerte in neuen Settings als Cent-Integer speichern.
Default-Tenant
Fuer den Bestand wird ein erster Tenant angelegt:
slug: default
name: Kaffeeliste Bestand
status: active
timezone: Europe/Berlin
locale: de-DE
currency_code: EUR
Die Werte koennen spaeter in einer Tenant-Einstellungsseite angepasst werden.
Backfill-Vorschlag
Ein separates Skript sollte die bestehenden Mitarbeiter spiegeln:
scripts/backfill-default-tenant.php
Vorgang:
- Default-Tenant anlegen oder laden.
tenant_settingsauskl_configerzeugen.- Fuer jede Zeile aus
kl_Mitarbeitereinenparticipantanlegen oder aktualisieren. - Fuer aktive Admins optional einen
userund einetenant_membershiperzeugen. admin = 1als Rolleadminabbilden; ein konfigurierter erster Benutzer kann Rolleownererhalten.
Der Backfill muss idempotent sein und darf keine bestehenden Legacy-Daten loeschen.
Erste Akzeptanzkriterien
- Migrationen laufen mehrfach ohne Fehler.
- Default-Tenant existiert genau einmal.
tenant_settingsenthalten Preis pro Strich und bestehende PayPal-Optionen.- Jeder bestehende
kl_Mitarbeiterhat genau einenparticipant. participants.legacy_mitarbeiter_idist gesetzt.- Admins werden als tenant-scoped Rolle abgebildet.
- Golden-Master und HTTP-Smoke bleiben gruen.
Risiken
| Risiko | Gegenmassnahme |
|---|---|
| Login-User und Kaffee-Teilnehmer werden vermischt | users und participants strikt getrennt halten |
| Mehrfacher Backfill erzeugt Duplikate | Eindeutige Constraints und Upsert-Logik |
| Legacy-App bricht durch neue Tabellen | M3 nur additiv, keine Legacy-Queries umstellen |
| Rollen werden global statt tenant-scoped | Rollen ausschliesslich in tenant_memberships speichern |
| Falsche Owner-Zuordnung | Owner per Env-Konfiguration oder manuell dokumentierter Entscheidung setzen |
Empfohlene Reihenfolge
- Migration
0002_saas_identity_tenants.sqlerstellen. scripts/backfill-default-tenant.phperstellen.- Backfill gegen die Dev-Datenbank ausfuehren.
- Kontrollskript fuer Tenant/Participant/Role-Counts schreiben.
- Golden-Master und HTTP-Smoke ausfuehren.
- Danach Login-/Registrierungsrouten planen.