getUser(); $email = $user->getEmail(); $password = $this->crypt->decrypt($user->getPassword()); try { $personalData = $this ->apiClient ->getPersonalData($email, $password); } catch (ApiClientException $e) { $this->addFlash('error', 'Deine persönlichen Daten konnten nicht abgerufen werden'); $personalData = new PersonalData(); } if ($personalData instanceof Notification) { $this->logger->error('Unable to fetch personal data', [ 'code' => $personalData->code, 'error' => $personalData->message, ]); $this->addFlash('error', 'Deine persönlichen Daten konnten nicht abgerufen werden'); $personalData = new PersonalData(); } $personalDataForm = $this->createForm(PersonalDataType::class, $personalData, [ 'attr' => ['novalidate' => 'novalidate'], 'validation_groups' => ['personal_data'], ]); $personalDataForm->handleRequest($request); if ($personalDataForm->isSubmitted() && $personalDataForm->isValid()) { try { $this->apiClient->updatePersonalData($email, $password, $personalData); $this->addFlash('success', 'Deine persönlichen Daten wurden aktualisiert'); $this->logger->info('Updated personal data', [ 'email' => $user->getEmail(), ]); } catch (ApiClientException $e) { $this->addFlash('error', $e->getMessage()); } return $this->redirectToRoute('app_personal_data'); } return $this->render('personal_data/index.html.twig', [ 'personalData' => $personalData, 'personalDataForm' => $personalDataForm->createView(), ]); } /** * Toggle newsletter subscription status for the authenticated user. * * Retrieves current personal data, toggles the newsletter subscription flag, * and updates the preference via BusProNet API. Designed for HTMX AJAX * requests to provide immediate feedback without full page reload. * * @return Response Redirect response to personal data page * * @throws ApiClientException When BusProNet API communication fails */ #[Route('/personal-data/newsletter', name: 'app_personal_data_newsletter', methods: ['POST'])] #[IsGranted('ROLE_USER')] public function newsletter(): Response { /** @var User $user */ $user = $this->getUser(); $email = $user->getEmail(); $password = $this->crypt->decrypt($user->getPassword()); try { $personalData = $this ->apiClient ->getPersonalData($email, $password); } catch (ApiClientException $e) { $this->addFlash('error', 'Deine persönlichen Daten konnten nicht abgerufen werden'); $personalData = new PersonalData(); } $personalData->communication->newsletter = !$personalData->communication->newsletter; try { $this->apiClient->updateNewsletterRegistration($email, $password, $personalData); $this->addFlash('success', 'Deine Anmeldung zum Newsletter wurde aktualisiert'); $this->logger->info('Updated newsletter registration', [ 'email' => $user->getEmail(), ]); } catch (ApiClientException $e) { $this->addFlash('error', $e->getMessage()); } return $this->redirectToRoute('app_personal_data'); } }