validateUser($value, $this->context); } protected function validateUser(UserEntity $user, ExecutionContextInterface $context): void { if ($user->hasEmail()) { $this->validateEmailExists($user->getId(), $user->getEmail(), 'email', User::USER_EXISTING_EMAIL, $context); $this->validateUsernameExists($user->getId(), $user->getEmail(), 'email', User::USER_EXISTING_EMAIL_AS_NAME, $context); } if ($user->hasUsername()) { $this->validateEmailExists($user->getId(), $user->getUserIdentifier(), 'username', User::USER_EXISTING_NAME_AS_EMAIL, $context); $this->validateUsernameExists($user->getId(), $user->getUserIdentifier(), 'username', User::USER_EXISTING_NAME, $context); } } private function validateEmailExists(?int $userId, string $email, string $path, string $code, ExecutionContextInterface $context): void { $existingByEmail = $this->userService->findUserByEmail($email); if (null !== $existingByEmail && $userId !== $existingByEmail->getId()) { $context->buildViolation(User::getErrorName($code)) ->atPath($path) ->setTranslationDomain('validators') ->setCode($code) ->addViolation(); } } private function validateUsernameExists(?int $userId, string $username, string $path, string $code, ExecutionContextInterface $context): void { $existingByName = $this->userService->findUserByName($username); if (null !== $existingByName && $userId !== $existingByName->getId()) { $context->buildViolation(User::getErrorName($code)) ->atPath($path) ->setTranslationDomain('validators') ->setCode($code) ->addViolation(); } } }