AdminAccessDataPersister.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\DataPersister\Access;
  4. use ApiPlatform\Core\DataPersister\ContextAwareDataPersisterInterface;
  5. use App\Entity\Access\Access;
  6. use App\Service\Access\Utils as AccessUtils;
  7. use App\Service\Core\ContactPointUtils;
  8. use Exception;
  9. use App\ApiResources\Access\AdminAccess;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Symfony\Component\Security\Core\Security;
  12. /**
  13. * Classe AdminAccessDataPersister qui est un custom dataPersister gérant la resource AdminAccess
  14. */
  15. class AdminAccessDataPersister implements ContextAwareDataPersisterInterface
  16. {
  17. public function __construct(
  18. private Security $security,
  19. private EntityManagerInterface $entityManager,
  20. private AccessUtils $accessUtils,
  21. private ContactPointUtils $contactPointUtils
  22. )
  23. { }
  24. public function supports($data, array $context = []): bool
  25. {
  26. return $data instanceof AdminAccess;
  27. }
  28. /**
  29. * @param AdminAccess $data
  30. * @param array $context
  31. * @return void|null
  32. */
  33. public function persist($data, array $context = []): void
  34. {
  35. /** @var Access $access */
  36. $access = $this->security->getUser();
  37. $administrator = $this->accessUtils->findAdminFor($access->getOrganization());
  38. if(!$administrator){
  39. throw new \RuntimeException('administrator_not_found', 404);
  40. }
  41. $contactPoint = $this->contactPointUtils->getPersonContactPointPrincipal($administrator);
  42. if(!$contactPoint){
  43. throw new \RuntimeException('administrator_contact_point_not_found', 404);
  44. }
  45. $contactPoint->setEmail($data->getEmail());
  46. $this->entityManager->flush();
  47. }
  48. public function remove($data, array $context = [])
  49. {
  50. throw new \RuntimeException('not supported', 500);
  51. }
  52. }