em = $em; $this->userRepository = $em->getRepository('SkobkinPointToolsBundle:User'); } /** * @param array $data * * @return User * * @throws ApiException * @throws InvalidResponseException */ public function createFromArray(array $data): User { $this->validateArrayData($data); /** @var User $user */ if (null === ($user = $this->userRepository->find($data['id']))) { // Creating new user $user = new User($data['id']); $this->em->persist($user); } // Updating data $user ->setLogin($data['login']) ->setName($data['name']) ; return $user; } /** * @param UserDTO $userData * * @return User * * @throws ApiException * @throws InvalidUserDataException */ public function createFromDTO(UserDTO $userData): User { $this->validateDTOData($userData); /** @var User $user */ if (null === ($user = $this->userRepository->find($userData->getId()))) { // Creating new user $user = new User($userData->getId()); $this->em->persist($user); } // Updating data $user ->setLogin($userData->getLogin()) ->setName($userData->getName()) ; return $user; } /** * @param array $data * * @throws InvalidResponseException */ private function validateArrayData(array $data) { if (!(array_key_exists('id', $data) || !!array_key_exists('login', $data) || !array_key_exists('name', $data))) { throw new InvalidResponseException('Invalid user data'); } } /** * @param UserDTO $data * * @throws InvalidResponseException */ private function validateDTOData(UserDTO $data) { if (!$data->getId() || !$data->getLogin()) { throw new InvalidUserDataException('User have no id or login', $data); } } }