src/EventSubscriber/AnalyticsEventSubscriber.php line 34

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use ApiPlatform\Core\EventListener\EventPriorities;
  4. use App\Entity\Veterinary\Analytic;
  5. use App\Entity\Veterinary\VeterinaryAnimalWeight;
  6. use App\Entity\Veterinary\VeterinaryCheckin;
  7. use App\Entity\Veterinary\VeterinaryClientUpdates;
  8. use App\Enumerators\AnalyticsClientType;
  9. use App\Enumerators\AnalyticsEventType;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Psr\Log\LoggerInterface;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpKernel\Event\ViewEvent;
  15. use Symfony\Component\HttpKernel\KernelEvents;
  16. final class AnalyticsEventSubscriber implements EventSubscriberInterface {
  17.     private $entityManager;
  18.     private $logger;
  19.     public function __construct(EntityManagerInterface $entityManagerLoggerInterface $logger) {
  20.         $this->entityManager $entityManager;
  21.         $this->logger $logger;
  22.     }
  23.     public static function getSubscribedEvents() {
  24.         return [
  25.             KernelEvents::VIEW => ['storeUpdate'EventPriorities::POST_WRITE],
  26.         ];
  27.     }
  28.     public function storeUpdate(ViewEvent $event) {
  29.         $entity $event->getControllerResult();
  30.         $request $event->getRequest();
  31.         $method $request->getMethod();
  32.         // Parse request content
  33.         $requestContent $request->getContent();
  34.         if (empty($requestContent)) {
  35.             return;
  36.         }
  37.         $params json_decode($requestContent);
  38.         if (empty($params->site)) {
  39.             return;
  40.         }
  41.         $analyticsEntry = new Analytic();
  42.         $analyticsEntry->site $params->site;
  43.         if ($entity instanceof VeterinaryClientUpdates && $method == Request::METHOD_PUT) {
  44.             // Client update event
  45.             $analyticsEntry->eventType AnalyticsEventType::DATAUPDATE;
  46.             $analyticsEntry->clientType AnalyticsClientType::EXISTING_CLIENT;
  47.             $analyticsEntry->clinic $entity->clinic->name;
  48.             $analyticsEntry->client $entity->clientFirstName ' ' $entity->clientLastName;
  49.         } elseif ($entity instanceof VeterinaryCheckin && $method == Request::METHOD_POST) {
  50.             // Checkin event
  51.             $analyticsEntry->eventType AnalyticsEventType::CHECKIN;
  52.             $analyticsEntry->clientType AnalyticsClientType::EXISTING_CLIENT;
  53.             $analyticsEntry->clinic $entity->clinic->name;
  54.             $analyticsEntry->client $entity->clientFirstName ' ' $entity->clientLastName;
  55.             $analyticsEntry->animalKind $entity->animalSpecies;
  56.             $analyticsEntry->animalBreed $entity->animalBreed;
  57.             $analyticsEntry->checkinReason $entity->getReason();
  58.         } elseif ($entity instanceof VeterinaryAnimalWeight && $method === Request::METHOD_POST) {
  59.             // Weight update event
  60.             $analyticsEntry->eventType AnalyticsEventType::WEIGHTUPDATE;
  61.             $analyticsEntry->clientType AnalyticsClientType::EXISTING_CLIENT;
  62.             $analyticsEntry->isWithAnimal true;
  63.             $analyticsEntry->clinic $entity->clinic->name;
  64.             $analyticsEntry->client $entity->clientFirstName ' ' $entity->clientLastName;
  65.             $analyticsEntry->animalKind $entity->animalSpecies;
  66.             $analyticsEntry->animalBreed $entity->animalBreed;
  67.         } else {
  68.             return;
  69.         }
  70.         $this->entityManager->persist($analyticsEntry);
  71.         $this->entityManager->flush();
  72.     }
  73. }