EventMappingBuilder.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Service\ApiResourceBuilder\Freemium;
  4. use App\ApiResources\Freemium\FreemiumEvent;
  5. use App\Entity\Booking\Event;
  6. use App\Entity\Core\AddressPostal;
  7. use App\Entity\Place\Place;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. /**
  10. * Mapping des informations d'un Event avec comme source un FreemiumEvent
  11. */
  12. class EventMappingBuilder
  13. {
  14. public function __construct(
  15. private EntityManagerInterface $em
  16. )
  17. {}
  18. /**
  19. * Mapping des informations.
  20. *
  21. * @param Event $event : objet target
  22. * @param FreemiumEvent $freemiumEvent : objet source
  23. */
  24. public function mapInformations(Event $event, FreemiumEvent $freemiumEvent)
  25. {
  26. $this->mapEventInformations( $event, $freemiumEvent);
  27. $this->mapEventPlaceInformations( $event, $freemiumEvent);
  28. }
  29. /**
  30. * Mapping des informations générales.
  31. *
  32. * @param Event $event : objet target
  33. * @param FreemiumEvent $freemiumEvent : objet source
  34. */
  35. private function mapEventInformations(Event $event, FreemiumEvent $freemiumEvent)
  36. {
  37. //General informations
  38. $event->setName($freemiumEvent->name);
  39. $event->setOrganization($freemiumEvent->organization);
  40. $event->setDatetimeStart($freemiumEvent->datetimeStart);
  41. $event->setDatetimeEnd($freemiumEvent->datetimeEnd);
  42. $event->setDescription($freemiumEvent->description);
  43. $event->setImage($freemiumEvent->image);
  44. $event->setUrl($freemiumEvent->url);
  45. $event->setUrlTicket($freemiumEvent->urlTicket);
  46. $event->setPricing($freemiumEvent->pricing);
  47. $event->setPriceMini($freemiumEvent->priceMini);
  48. $event->setPriceMaxi($freemiumEvent->priceMaxi);
  49. //Catégories
  50. $event->removeAllCategories();
  51. foreach ($freemiumEvent->categories as $category) {
  52. $event->addCategory($category);
  53. }
  54. }
  55. /**
  56. * Recherche et mapping du lieu de lévénement
  57. * @param Event $event
  58. * @param FreemiumEvent $freemiumEvent
  59. * @return void
  60. */
  61. private function mapEventPlaceInformations(Event $event, FreemiumEvent $freemiumEvent){
  62. $place = $this->getPlace($freemiumEvent);
  63. if($place !== null){
  64. $this->mapPlaceInformations($place, $freemiumEvent);
  65. $this->em->persist($place);
  66. }
  67. $event->setPlace($place);
  68. }
  69. /**
  70. * Mapping des informations du lieux et de son adresse postale
  71. * @param FreemiumEvent $freemiumEvent
  72. * @return Place|array|object[]
  73. */
  74. private function mapPlaceInformations(Place $place, FreemiumEvent $freemiumEvent): void
  75. {
  76. $addressPostal = $this->getAddressPostal($place);
  77. //Mapping des informations de l'adresse
  78. $addressPostal
  79. ->setStreetAddress($freemiumEvent->streetAddress)
  80. ->setStreetAddressSecond($freemiumEvent->streetAddressSecond)
  81. ->setStreetAddressThird($freemiumEvent->streetAddressThird)
  82. ->setPostalCode($freemiumEvent->postalCode)
  83. ->setAddressCity($freemiumEvent->addressCity)
  84. ->setAddressCountry($freemiumEvent->addressCountry)
  85. ->setLatitude($freemiumEvent->latitude)
  86. ->setLongitude($freemiumEvent->longitude);
  87. //Mapping des informations du lieu
  88. $place
  89. ->setName($freemiumEvent->placeName)
  90. ->setOrganization($freemiumEvent->organization)
  91. ->setAddressPostal($addressPostal);
  92. }
  93. /**
  94. * Récupération de la place si définie, sinon on en créer une si un minimum d'information est fournies
  95. * @param FreemiumEvent $freemiumEvent
  96. * @return Place|null
  97. */
  98. private function getPlace(FreemiumEvent $freemiumEvent): ?Place
  99. {
  100. if ($freemiumEvent->place) {
  101. return $freemiumEvent->place;
  102. } else if (
  103. $freemiumEvent->placeName ||
  104. $freemiumEvent->streetAddress ||
  105. $freemiumEvent->streetAddressSecond ||
  106. $freemiumEvent->streetAddressThird ||
  107. $freemiumEvent->postalCode ||
  108. $freemiumEvent->addressCity
  109. ) {
  110. return new Place();
  111. }
  112. return null;
  113. }
  114. /**
  115. * Récupération de l'adresse postale si définie, sinon on en créer une nouvelle.
  116. * @param Place $place
  117. * @return AddressPostal
  118. */
  119. private function getAddressPostal(Place $place): AddressPostal
  120. {
  121. if ($place->getAddressPostal()) {
  122. return $place->getAddressPostal();
  123. }
  124. return new AddressPostal();
  125. }
  126. }