2015-10-26 02:57:53 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Skobkin\Bundle\PointToolsBundle\Service\Factory;
|
|
|
|
|
2017-01-15 02:54:38 +00:00
|
|
|
use Psr\Log\LoggerInterface;
|
|
|
|
use Skobkin\Bundle\PointToolsBundle\DTO\Api\User as UserDTO;
|
2015-10-26 02:57:53 +00:00
|
|
|
use Skobkin\Bundle\PointToolsBundle\Entity\User;
|
2017-01-11 15:58:02 +00:00
|
|
|
use Skobkin\Bundle\PointToolsBundle\Repository\UserRepository;
|
2017-01-15 02:54:38 +00:00
|
|
|
use Skobkin\Bundle\PointToolsBundle\Exception\Factory\InvalidUserDataException;
|
2015-10-26 02:57:53 +00:00
|
|
|
|
2017-01-15 02:54:38 +00:00
|
|
|
class UserFactory extends AbstractFactory
|
2015-10-26 02:57:53 +00:00
|
|
|
{
|
|
|
|
/**
|
2017-01-11 15:58:02 +00:00
|
|
|
* @var UserRepository
|
2015-10-26 02:57:53 +00:00
|
|
|
*/
|
|
|
|
private $userRepository;
|
|
|
|
|
|
|
|
|
2017-01-15 02:54:38 +00:00
|
|
|
public function __construct(LoggerInterface $logger, UserRepository $userRepository)
|
2015-10-26 02:57:53 +00:00
|
|
|
{
|
2017-01-15 02:54:38 +00:00
|
|
|
parent::__construct($logger);
|
|
|
|
$this->userRepository = $userRepository;
|
2015-10-26 02:57:53 +00:00
|
|
|
}
|
|
|
|
|
2016-03-23 19:38:44 +00:00
|
|
|
/**
|
|
|
|
* @param UserDTO $userData
|
|
|
|
*
|
|
|
|
* @return User
|
2017-01-08 23:26:06 +00:00
|
|
|
*
|
2016-03-23 19:38:44 +00:00
|
|
|
* @throws InvalidUserDataException
|
|
|
|
*/
|
2017-01-15 02:54:38 +00:00
|
|
|
public function findOrCreateFromDTO(UserDTO $userData): User
|
2016-03-23 19:38:44 +00:00
|
|
|
{
|
2017-01-15 02:54:38 +00:00
|
|
|
// @todo LOG
|
|
|
|
|
|
|
|
if (!$userData->isValid()) {
|
|
|
|
throw new InvalidUserDataException('Invalid user data', $userData);
|
|
|
|
}
|
2016-03-23 19:38:44 +00:00
|
|
|
|
|
|
|
/** @var User $user */
|
|
|
|
if (null === ($user = $this->userRepository->find($userData->getId()))) {
|
2017-01-17 21:58:53 +00:00
|
|
|
$user = new User(
|
|
|
|
$userData->getId(),
|
|
|
|
\DateTime::createFromFormat('Y-m-d_H:i:s', $userData->getCreated()) ?: new \DateTime()
|
|
|
|
);
|
2017-01-11 15:58:02 +00:00
|
|
|
$this->userRepository->add($user);
|
2016-03-23 19:38:44 +00:00
|
|
|
}
|
|
|
|
|
2017-01-17 21:58:53 +00:00
|
|
|
$user->updateLoginAndName($userData->getLogin(), $userData->getName());
|
2016-03-23 19:38:44 +00:00
|
|
|
|
2017-11-04 19:38:38 +00:00
|
|
|
if (null !== $userData->getDenyAnonymous() && null !== $userData->getPrivate()) {
|
|
|
|
$user->updatePrivacy(!$userData->getDenyAnonymous(), $userData->getPrivate());
|
|
|
|
}
|
|
|
|
|
2016-03-23 19:38:44 +00:00
|
|
|
return $user;
|
|
|
|
}
|
|
|
|
|
2017-01-15 02:54:38 +00:00
|
|
|
public function findOrCreateFromDTOArray(array $usersData): array
|
2015-10-26 02:57:53 +00:00
|
|
|
{
|
2017-01-15 02:54:38 +00:00
|
|
|
// @todo LOG
|
2016-03-23 19:38:44 +00:00
|
|
|
|
2017-01-15 02:54:38 +00:00
|
|
|
$result = [];
|
|
|
|
|
|
|
|
foreach ($usersData as $userData) {
|
|
|
|
$result[] = $this->findOrCreateFromDTO($userData);
|
2016-03-23 19:38:44 +00:00
|
|
|
}
|
2017-01-15 02:54:38 +00:00
|
|
|
|
|
|
|
return $result;
|
2016-03-23 19:38:44 +00:00
|
|
|
}
|
2015-10-26 02:57:53 +00:00
|
|
|
}
|