AccessProfileCreator.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Service\Access;
  4. use App\ApiResources\Profile\AccessProfile;
  5. use App\Entity\Access\Access;
  6. use App\Repository\Access\AccessRepository;
  7. use App\Service\Organization\OrganizationProfileCreator;
  8. use App\Test\Service\Access\AccessProfileCreatorTest;
  9. use Symfony\Component\Security\Core\Exception\AuthenticationException;
  10. /**
  11. * Class AccessProfileCreator : Service contenant les manipulations associés à la ressource AccessProfile
  12. * @package App\Service\Access
  13. */
  14. class AccessProfileCreator
  15. {
  16. public function __construct(
  17. private OrganizationProfileCreator $organizationProfileCreator,
  18. private AccessRepository $accessRepository,
  19. private Utils $accessUtils
  20. )
  21. { }
  22. /**
  23. * On récupère l'accessProfile complet correspondant à l'Access
  24. * @param Access $access
  25. * @param Access $originalAccess
  26. * @return AccessProfile
  27. * @throws \Exception
  28. * @see AccessProfileCreatorTest::testGetAccessProfileFailed
  29. */
  30. public function getAccessProfile(Access $access, Access $originalAccess = null): AccessProfile
  31. {
  32. $validAccesses = $this->accessRepository->findAllValidAccesses($access);
  33. if(empty($validAccesses))
  34. throw new AuthenticationException('no_valid_access', 401);
  35. //L'Access en paramètre est celui de la connexion
  36. $mainAccessProfile = $this->createCompleteAccessProfile($access);
  37. //On remplit les accesses multi-compte
  38. $multiAccesses = $this->accessUtils->filterAccesses($validAccesses, $access);
  39. foreach ($multiAccesses as $multiAccess){
  40. $mainAccessProfile->addMultiAccess($this->organizationProfileCreator->createLightOrganizationProfile($multiAccess->getOrganization()));
  41. }
  42. //On remplit les accesses famille
  43. $familyAccesses = $access->getChildren();
  44. foreach ($familyAccesses as $familyAccess){
  45. $mainAccessProfile->addFamilyAccess($this->createLightAccessProfile($familyAccess));
  46. }
  47. //Dans le cas où nous sommes dans une connexion switch
  48. if($originalAccess){
  49. $mainAccessProfile->setOriginalAccess($this->createLightAccessProfile($originalAccess));
  50. }
  51. return $mainAccessProfile;
  52. }
  53. /**
  54. * Créer une ressource AccessProfile à partir d'une entité Access
  55. * @param Access $access
  56. * @return AccessProfile
  57. * @see AccessProfileCreatorTest::testCreateAccessProfile
  58. */
  59. public function createCompleteAccessProfile(Access $access): AccessProfile
  60. {
  61. $accessProfile = $this->createLightAccessProfile($access);
  62. return $accessProfile
  63. ->setIsAdminAccess($access->getAdminAccess())
  64. ->setRoles($this->accessUtils->getAllRoles($access))
  65. ->setHistorical($access->getHistorical())
  66. ->setOrganization($this->organizationProfileCreator->createCompleteOrganizationProfile($access->getOrganization()))
  67. ->setIsGuardian(!$access->getChildren()->isEmpty())
  68. ->setIsPayor(
  69. !$access->getBillingPayers()->isEmpty() ||
  70. ($access->getBillingReceivers()->isEmpty() && $access->getChildren()->isEmpty() && !$access->getAccessIntangibles()->isEmpty())
  71. )
  72. ;
  73. }
  74. /**
  75. * Classe permettant de créer et Setter les éléments de base d'une ressource AccessProfile à partir d'une entité Access
  76. * @param Access $access
  77. * @return AccessProfile
  78. * @see AccessProfileCreatorTest::testCreateLightAccessProfile()
  79. */
  80. public function createLightAccessProfile(Access $access): AccessProfile
  81. {
  82. $accessProfile = new AccessProfile();
  83. return $accessProfile
  84. ->setId($access->getId())
  85. ->setName($access->getPerson()->getName())
  86. ->setGivenName($access->getPerson()->getGivenName())
  87. ->setGender($access->getPerson()->getGender())
  88. ->setActivityYear($access->getActivityYear())
  89. ->setAvatarId($access->getPerson()->getImage()?->getId())
  90. ->setIsSuperAdminAccess($access->getSuperAdminAccess())
  91. ->setOrganization($this->organizationProfileCreator->createLightOrganizationProfile($access->getOrganization()))
  92. ;
  93. }
  94. }