| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- <?php
- declare(strict_types=1);
- namespace App\Service\ApiResourceBuilder\Freemium;
- use App\ApiResources\Freemium\FreemiumEvent;
- use App\Entity\Booking\Event;
- use App\Entity\Core\AddressPostal;
- use App\Entity\Place\Place;
- use Doctrine\ORM\EntityManagerInterface;
- /**
- * Mapping des informations d'un Event avec comme source un FreemiumEvent
- */
- class EventMappingBuilder
- {
- public function __construct(
- private EntityManagerInterface $em
- )
- {}
- /**
- * Mapping des informations.
- *
- * @param Event $event : objet target
- * @param FreemiumEvent $freemiumEvent : objet source
- */
- public function mapInformations(Event $event, FreemiumEvent $freemiumEvent)
- {
- $this->mapEventInformations( $event, $freemiumEvent);
- $this->mapEventPlaceInformations( $event, $freemiumEvent);
- }
- /**
- * Mapping des informations générales.
- *
- * @param Event $event : objet target
- * @param FreemiumEvent $freemiumEvent : objet source
- */
- private function mapEventInformations(Event $event, FreemiumEvent $freemiumEvent)
- {
- //General informations
- $event->setName($freemiumEvent->name);
- $event->setOrganization($freemiumEvent->organization);
- $event->setDatetimeStart($freemiumEvent->datetimeStart);
- $event->setDatetimeEnd($freemiumEvent->datetimeEnd);
- $event->setDescription($freemiumEvent->description);
- $event->setImage($freemiumEvent->image);
- $event->setUrl($freemiumEvent->url);
- $event->setUrlTicket($freemiumEvent->urlTicket);
- $event->setPricing($freemiumEvent->pricing);
- $event->setPriceMini($freemiumEvent->priceMini);
- $event->setPriceMaxi($freemiumEvent->priceMaxi);
- //Catégories
- $event->removeAllCategories();
- foreach ($freemiumEvent->categories as $category) {
- $event->addCategory($category);
- }
- }
- /**
- * Recherche et mapping du lieu de lévénement
- * @param Event $event
- * @param FreemiumEvent $freemiumEvent
- * @return void
- */
- private function mapEventPlaceInformations(Event $event, FreemiumEvent $freemiumEvent){
- $place = $this->getPlace($freemiumEvent);
- if($place !== null){
- $this->mapPlaceInformations($place, $freemiumEvent);
- $this->em->persist($place);
- }
- $event->setPlace($place);
- }
- /**
- * Mapping des informations du lieux et de son adresse postale
- * @param FreemiumEvent $freemiumEvent
- * @return Place|array|object[]
- */
- private function mapPlaceInformations(Place $place, FreemiumEvent $freemiumEvent): void
- {
- $addressPostal = $this->getAddressPostal($place);
- //Mapping des informations de l'adresse
- $addressPostal
- ->setStreetAddress($freemiumEvent->streetAddress)
- ->setStreetAddressSecond($freemiumEvent->streetAddressSecond)
- ->setStreetAddressThird($freemiumEvent->streetAddressThird)
- ->setPostalCode($freemiumEvent->postalCode)
- ->setAddressCity($freemiumEvent->addressCity)
- ->setAddressCountry($freemiumEvent->addressCountry)
- ->setLatitude($freemiumEvent->latitude)
- ->setLongitude($freemiumEvent->longitude);
- //Mapping des informations du lieu
- $place
- ->setName($freemiumEvent->placeName)
- ->setOrganization($freemiumEvent->organization)
- ->setAddressPostal($addressPostal);
- }
- /**
- * Récupération de la place si définie, sinon on en créer une si un minimum d'information est fournies
- * @param FreemiumEvent $freemiumEvent
- * @return Place|null
- */
- private function getPlace(FreemiumEvent $freemiumEvent): ?Place
- {
- if ($freemiumEvent->place) {
- return $freemiumEvent->place;
- } else if (
- $freemiumEvent->placeName ||
- $freemiumEvent->streetAddress ||
- $freemiumEvent->streetAddressSecond ||
- $freemiumEvent->streetAddressThird ||
- $freemiumEvent->postalCode ||
- $freemiumEvent->addressCity
- ) {
- return new Place();
- }
- return null;
- }
- /**
- * Récupération de l'adresse postale si définie, sinon on en créer une nouvelle.
- * @param Place $place
- * @return AddressPostal
- */
- private function getAddressPostal(Place $place): AddressPostal
- {
- if ($place->getAddressPostal()) {
- return $place->getAddressPostal();
- }
- return new AddressPostal();
- }
- }
|