query('SELECT id FROM tenants WHERE slug = ' . $pdo->quote($slug))->fetchColumn() ?: 0); if ($tenantId === 0) { $pdo->prepare('INSERT INTO tenants (slug, name, status) VALUES (?, ?, ?)') ->execute([$slug, 'Dev-Mandant', 'active']); $tenantId = (int)$pdo->lastInsertId(); } if ((int)$pdo->query("SELECT COUNT(*) FROM tenant_settings WHERE tenant_id = {$tenantId}")->fetchColumn() === 0) { $pdo->prepare('INSERT INTO tenant_settings (tenant_id) VALUES (?)')->execute([$tenantId]); } // Owner-Login. $userId = (int)($pdo->query('SELECT id FROM users WHERE email_norm = ' . $pdo->quote($email))->fetchColumn() ?: 0); if ($userId === 0) { $pdo->prepare( 'INSERT INTO users (email, email_norm, display_name, password_hash, status, email_verified_at) VALUES (?, ?, ?, ?, ?, NOW())' )->execute([$email, $email, $name, password_hash($password, PASSWORD_DEFAULT), 'active']); $userId = (int)$pdo->lastInsertId(); } if ((int)$pdo->query("SELECT COUNT(*) FROM tenant_memberships WHERE tenant_id = {$tenantId} AND user_id = {$userId}")->fetchColumn() === 0) { $pdo->prepare('INSERT INTO tenant_memberships (tenant_id, user_id, role, status, joined_at) VALUES (?, ?, ?, ?, NOW())') ->execute([$tenantId, $userId, 'owner', 'active']); } // Teilnehmer des Owners. $participantId = (int)($pdo->query("SELECT id FROM participants WHERE tenant_id = {$tenantId} AND user_id = {$userId}")->fetchColumn() ?: 0); if ($participantId === 0) { $pdo->prepare('INSERT INTO participants (tenant_id, user_id, display_name, email, email_norm, active) VALUES (?, ?, ?, ?, ?, 1)') ->execute([$tenantId, $userId, $name, $email, $email]); $participantId = (int)$pdo->lastInsertId(); } // Ein paar Buchungen, damit die Seiten nicht komplett leer sind. if ((int)$pdo->query("SELECT COUNT(*) FROM ledger_entries WHERE tenant_id = {$tenantId} AND participant_id = {$participantId}")->fetchColumn() === 0) { $pdo->prepare( "INSERT INTO ledger_entries (tenant_id, participant_id, type, amount_cents, booked_at, source) VALUES (?, ?, 'payment', ?, NOW(), 'manual_bulk')" )->execute([$tenantId, $participantId, 1000]); $pdo->prepare( "INSERT INTO ledger_entries (tenant_id, participant_id, type, amount_cents, marks_count, unit_price_cents, booked_at, source) VALUES (?, ?, 'consumption', ?, ?, 20, NOW(), 'manual_bulk')" )->execute([$tenantId, $participantId, -60, 3]); } // Hinweis. if ((int)$pdo->query("SELECT COUNT(*) FROM notices WHERE tenant_id = {$tenantId} AND deleted_at IS NULL")->fetchColumn() === 0) { $pdo->prepare( 'INSERT INTO notices (tenant_id, message, valid_from, valid_until, created_by_user_id) VALUES (?, ?, NOW(), DATE_ADD(NOW(), INTERVAL 30 DAY), ?)' )->execute([$tenantId, 'Dev-Hinweis: MySQL-Testumgebung aktiv.', $userId]); } echo "MySQL dev schema is ready. Login: {$email} / {$password} (Mandant '{$slug}').\n";