Ver Fonte

Se modifica el listener para poder actualizar y eliminar de manera
correcta los dispositivos en el base. Se agrega url de delete al
servicio.

Maximiliano Schvindt há 7 anos atrás
pai
commit
e8ca2d03e5
2 ficheiros alterados com 54 adições e 4 exclusões
  1. 51 2
      EventListener/DeviceListener.php
  2. 3 2
      Resources/config/services.yml

+ 51 - 2
EventListener/DeviceListener.php

@@ -24,6 +24,11 @@ class DeviceListener
      * @var string
      */
     private $deviceDeletePostUrl;
+    
+    /**
+     * @var string
+     */
+    private $devicePutUrl;
 
 
     /**
@@ -31,11 +36,12 @@ class DeviceListener
      * @param string $devicePostUrl
      * @param string $deviceDeletePostUrl
      */
-    public function __construct(Webservice $webservice, $devicePostUrl, $deviceDeletePostUrl)
+    public function __construct(Webservice $webservice, $devicePostUrl, $deviceDeletePostUrl, $devicePutUrl)
     {
         $this->webservice = $webservice;
         $this->devicePostUrl = $devicePostUrl;
         $this->deviceDeletePostUrl = $deviceDeletePostUrl;
+        $this->devicePutUrl = $devicePutUrl;
     }
 
     /**
@@ -51,7 +57,30 @@ class DeviceListener
      */
     public function preRemove(LifecycleEventArgs $args)
     {
-        $this->send($args, $this->deviceDeletePostUrl, HttpRequestInterface::METHOD_DELETE);
+        $entity = $args->getEntity();
+        if ($entity instanceof DeviceInterface) {
+            if($deviceId = $this->getRemoteDeviceId($entity)) {
+
+                $data = array('id' => $deviceId);
+                return $this->webservice->makeGetRequest($this->deviceDeletePostUrl, HttpRequestInterface::METHOD_DELETE, $data);
+            }
+        }
+    }
+    
+    /**
+     * @param LifecycleEventArgs $args
+     */
+    public function postUpdate(LifecycleEventArgs $args)
+    {
+        $entity = $args->getEntity();
+        if ($entity instanceof DeviceInterface) {
+            if($deviceId = $this->getRemoteDeviceId($entity)) {
+
+                $url = "{$this->devicePutUrl}{$deviceId}";
+                $this->send($args, $url, HttpRequestInterface::METHOD_PUT);
+            }
+        }
+
     }
 
     /**
@@ -69,4 +98,24 @@ class DeviceListener
         }
     }
 
+    /**
+     * @param object $entity
+     */
+    private function getRemoteDeviceId($entity) 
+    {
+        $deviceId = $entity->getId();
+        $deviceType = get_class($entity);
+        $tenancyId = $entity->getTenancyId();
+            
+
+        $filters = array('deviceId'=>$deviceId,'deviceType'=>$deviceType,'tenancyId'=>$tenancyId);
+        $data = $this->webservice->getData("device_post_url",$filters);
+
+        $deviceId = null;
+        if(isset($data[0])) 
+            $deviceId = $data[0]['id'];
+        
+        return $deviceId;
+    }
+
 }

+ 3 - 2
Resources/config/services.yml

@@ -6,7 +6,8 @@ services:
             - { name: validator.constraint_validator }
     device.device_listener:
         class: DeviceBundle\EventListener\DeviceListener
-        arguments: ["@webservice","%device_post_url%","%device_delete_post_url%"]
+        arguments: ["@webservice","%device_post_url%","%device_delete_post_url%","%device_put_url%"]
         tags:
             - { name: doctrine.event_listener, event: postPersist }
-            - { name: doctrine.event_listener, event: preRemove }
+            - { name: doctrine.event_listener, event: preRemove }
+            - { name: doctrine.event_listener, event: postUpdate }