AccessProfileCreator.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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\ProfileCreator
  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. $validAccesses = $this->accessRepository->findAllValidAccesses($access);
  32. if(empty($validAccesses))
  33. throw new AuthenticationException('no_valid_access', 401);
  34. //L'Access en paramètre est celui de la connexion
  35. $mainAccessProfile = $this->createCompleteAccessProfile($access);
  36. //On remplit les accesses multi-compte
  37. $multiAccesses = $this->accessUtils->filterAccesses($validAccesses, $access);
  38. foreach ($multiAccesses as $multiAccess){
  39. $mainAccessProfile->addMultiAccess($this->organizationProfileCreator->createLightOrganizationProfile($multiAccess->getOrganization()));
  40. }
  41. //On remplit les accesses famille
  42. $familyAccesses = $access->getChildren();
  43. foreach ($familyAccesses as $familyAccess){
  44. $mainAccessProfile->addFamilyAccess($this->createLightAccessProfile($familyAccess));
  45. }
  46. //Dans le cas où nous sommes dans une connexion switch
  47. if($originalAccess){
  48. $mainAccessProfile->setOriginalAccess($this->createLightAccessProfile($originalAccess));
  49. }
  50. return $mainAccessProfile;
  51. }
  52. /**
  53. * Créer une ressource AccessProfile à partir d'une entité Access
  54. * @param Access $access
  55. * @return AccessProfile
  56. * @see AccessProfileCreatorTest::testCreateAccessProfile
  57. */
  58. public function createCompleteAccessProfile(Access $access): AccessProfile{
  59. $accessProfile = $this->createLightAccessProfile($access);
  60. return $accessProfile
  61. ->setIsAdminAccess($access->getAdminAccess())
  62. ->setRoles($this->accessUtils->getAllRoles($access))
  63. ->setHistorical($access->getHistorical())
  64. ->setOrganization($this->organizationProfileCreator->createCompleteOrganizationProfile($access->getOrganization()))
  65. ->setIsGuardian(!$access->getChildren()->isEmpty())
  66. ->setIsPayor(
  67. !$access->getBillingPayers()->isEmpty() ||
  68. ($access->getBillingReceivers()->isEmpty() && $access->getChildren()->isEmpty() && !$access->getAccessIntangibles()->isEmpty())
  69. )
  70. ;
  71. }
  72. /**
  73. * Classe permettant de créer et Setter les éléments de base d'une ressource AccessProfile à partir d'une entité Access
  74. * @param Access $access
  75. * @return AccessProfile
  76. * @see AccessProfileCreatorTest::testCreateLightAccessProfile()
  77. */
  78. public function createLightAccessProfile(Access $access): AccessProfile{
  79. $accessProfile = new AccessProfile();
  80. return $accessProfile
  81. ->setId($access->getId())
  82. ->setName($access->getPerson()->getName())
  83. ->setGivenName($access->getPerson()->getGivenName())
  84. ->setGender($access->getPerson()->getGender())
  85. ->setActivityYear($access->getActivityYear())
  86. ->setAvatarId($access->getPerson()->getImage()?->getId())
  87. ;
  88. }
  89. }