crypt->decrypt($user->getPassword()); $email = $user->getEmail(); // Fetch personal data from API $result = $this->apiClient->getPersonalData($email, $password); // Handle API error response if ($result instanceof Notification) { $this->logger->warning('Failed to fetch personal data for prepopulation', [ 'email' => $email, 'code' => $result->code, 'message' => $result->message, ]); return $applicant; } // Create a temporary participant from personal data $prepopulated = ParticipantDto::fromPersonalData($result); // Copy personal data fields to the existing applicant // Preserve booking-specific fields (roomId, services, etc.) $applicant->addressId = $prepopulated->addressId; $applicant->personId = $prepopulated->personId; $applicant->firstName = $prepopulated->firstName; $applicant->lastName = $prepopulated->lastName; $applicant->title = $prepopulated->title; $applicant->gender = $prepopulated->gender; $applicant->nationality = $prepopulated->nationality; $applicant->dateOfBirth = $prepopulated->dateOfBirth; $applicant->email = $prepopulated->email; $applicant->mobile = $prepopulated->mobile; $applicant->address = $prepopulated->address; $applicant->height = $prepopulated->height; $applicant->weight = $prepopulated->weight; $applicant->shoeSize = $prepopulated->shoeSize; $applicant->remarksRoom = $prepopulated->remarksRoom; $applicant->licensePlate = $prepopulated->licensePlate; return $applicant; } catch (\Exception $e) { // Catch any unexpected exceptions (decryption failure, API errors, etc.) $this->logger->error('Exception during applicant prepopulation', [ 'error' => $e->getMessage(), 'email' => $user->getEmail(), ]); return $applicant; } } }