$page + 1, 'totalPages' => $totalPages]); FaultSimulator::maybeApply($simulationConfig, 'fetchExternalUsers'); $start = $page * $pageSize + 1; $end = min(($page + 1) * $pageSize, $count); for ($i = $start; $i <= $end; $i++) { $users[] = [ 'name' => 'User ' . $i, 'email' => 'user_' . $i . '_' . Str::random(4) . '@example.com', 'legacy_id' => 'LEG-' . $i, ]; } } return $users; } public function validateUsers(array $users, array $simulationConfig = []): array { FaultSimulator::maybeApply($simulationConfig, 'validateUsers'); $validUsers = array_filter($users, function (array $user) { if (empty($user['name'])) { return false; } if (!filter_var($user['email'] ?? '', FILTER_VALIDATE_EMAIL)) { return false; } return true; }); $validUsers = array_values($validUsers); Log::info(sprintf( 'Validated users: %d valid out of %d total', count($validUsers), count($users) )); return $validUsers; } public function createAccounts(array $users, array $simulationConfig = []): array { FaultSimulator::maybeApply($simulationConfig, 'createAccounts'); $created = 0; $failed = 0; $createdIds = []; $errors = []; foreach ($users as $index => $userData) { Activity::heartbeat(sprintf('Creating account %d of %d', $index + 1, count($users))); try { $user = User::create([ 'name' => $userData['name'], 'email' => $userData['email'], 'password' => Hash::make(Str::random(16)), ]); $createdIds[] = $user->id; $created++; } catch (\Throwable $e) { $failed++; $errors[] = [ 'email' => $userData['email'], 'error' => $e->getMessage(), ]; Log::warning(sprintf( 'Failed to create account for %s: %s', $userData['email'], $e->getMessage() )); } } return [ 'created' => $created, 'failed' => $failed, 'created_ids' => $createdIds, 'errors' => $errors, 'attempt' => Activity::getInfo()->attempt, ]; } public function sendWelcomeEmails(array $userIds, array $simulationConfig = []): bool { FaultSimulator::maybeApply($simulationConfig, 'sendWelcomeEmails'); foreach ($userIds as $id) { Log::info(sprintf('Sending welcome email to user ID: %s', $id)); usleep(50000); } return true; } public function generateMigrationReport(int $totalUsers, int $processedUsers, int $failedUsers, array $simulationConfig = []): array { FaultSimulator::maybeApply($simulationConfig, 'generateMigrationReport'); $successRate = $totalUsers > 0 ? round(($processedUsers / $totalUsers) * 100, 2) : 0.0; return [ 'total_users' => $totalUsers, 'processed_users' => $processedUsers, 'failed_users' => $failedUsers, 'success_rate' => $successRate, 'timestamp' => now()->toIso8601String(), ]; } }