M3 Tenant-Aufloesung per App-Session ergaenzen

- Mandantenauswahl fuer Benutzer mit mehreren Tenants bauen
- feste Tenant-Domains ohne Wildcard-Abhaengigkeit vorbereiten
- Login, Backfill, Smoke-Checks und M3-Dokumentation aktualisieren
This commit is contained in:
2026-07-13 20:04:20 +02:00
parent 8ab4a8a9bb
commit 9f2e1bdfb1
10 changed files with 475 additions and 28 deletions
+16 -1
View File
@@ -89,6 +89,7 @@ $ownerEmailNorm = m3_email_norm(getenv('M3_DEFAULT_TENANT_OWNER_EMAIL') ?: null)
$stats = [
'applied_migrations' => count($applied),
'participants' => 0,
'stale_participants_removed' => 0,
'users' => 0,
'memberships' => 0,
];
@@ -154,7 +155,8 @@ try {
email = VALUES(email),
email_norm = VALUES(email_norm),
paypal_name = VALUES(paypal_name),
active = VALUES(active)'
active = VALUES(active),
legacy_mitarbeiter_id = VALUES(legacy_mitarbeiter_id)'
);
$upsertMembership = $pdo->prepare(
'INSERT INTO tenant_memberships (tenant_id, user_id, role, status, joined_at)
@@ -206,6 +208,18 @@ try {
$stats['memberships']++;
}
$removeStaleParticipants = $pdo->prepare(
'DELETE p
FROM participants p
LEFT JOIN kl_Mitarbeiter m
ON m.MitarbeiterID = p.legacy_mitarbeiter_id
WHERE p.tenant_id = ?
AND p.legacy_mitarbeiter_id IS NOT NULL
AND m.MitarbeiterID IS NULL'
);
$removeStaleParticipants->execute([$tenantId]);
$stats['stale_participants_removed'] = $removeStaleParticipants->rowCount();
$pdo->commit();
} catch (Throwable $e) {
$pdo->rollBack();
@@ -217,5 +231,6 @@ echo "M3 default tenant backfill complete.\n";
echo "Tenant: {$tenantSlug}\n";
echo "Applied migrations: {$stats['applied_migrations']}\n";
echo "Participants mirrored: {$stats['participants']}\n";
echo "Stale participants removed: {$stats['stale_participants_removed']}\n";
echo "Users upserted: {$stats['users']}\n";
echo "Memberships upserted: {$stats['memberships']}\n";