trim((string) $rawData['name']), 'email' => trim((string) $rawData['email']), 'role' => trim((string) ($rawData['role'] ?? 'user')), 'gender' => isset($rawData['gender']) ? trim((string) $rawData['gender']) : null, 'date_of_birth' => isset($rawData['date_of_birth']) ? trim((string) $rawData['date_of_birth']) : null, 'phone_number' => isset($rawData['phone']) ? trim((string) $rawData['phone']) : null, ]; } /** * Coordinate and execute internal domain mutations using the transformed payload. * * @throws Throwable */ public function updateOrCreateDomainState(array $payload, ?Model $model = null): void { /** @var User|null $user */ $user = $model; if ($user) { $this->updateUser->execute( $user, new UpdateUserIdentityDTO(name: $payload['name'], email: $payload['email']) ); } else { $user = $this->provisionNewUser->execute( new ProvisionUserDTO( name: $payload['name'], email: $payload['email'], password: Str::random(8), role: RoleType::USER->value ) ); } // Handle cross-domain profile write details UserImportWasProcessed::dispatch( userId: $user->id, email: $payload['email'], gender: $payload['gender'], dateOfBirth: $payload['date_of_birth'], phoneNumber: $payload['phone_number'] ); } }