*/ class SaveUserDownloadPreferencesHandler implements HandlerInterface { public function __construct( private readonly EntityManagerInterface $entityManager, private readonly PreferencesRepository $preferenceRepository, private readonly Security $token, ) {} public function handle(C $command): R { /** @var User $user */ $user = $this->token->getUser(); foreach ($command as $preference => $value) { if ($user->hasUserPreference($preference)) { $user->updateUserPreference($preference, $value); $this->entityManager->flush(); continue; } $preference = $this->preferenceRepository->find($preference); $user->addUserPreference( (new UserPreference()) ->setUser($user) ->setPreference($preference) ->setPreferenceValue($value) ); } $this->entityManager->flush(); return new SaveUserDownloadPreferencesResult($user->getDownloadPreferences()); } }