src/Controller/DispositivoController.php line 279

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Classes\AppResponse;
  4. use App\Classes\PackageManager;
  5. use App\Entity\Contrato;
  6. use App\Entity\Dispositivo;
  7. use App\Entity\Interfaces\ContratoDependenteInterface;
  8. use App\Entity\Interfaces\EntityInterface;
  9. use App\Entity\Interfaces\UsuarioDependenteInterface;
  10. use App\Entity\PackageSistema;
  11. use App\Form\DispositivoAlterarSenhaType;
  12. use App\Form\DispositivoAlterarIdentificadorPropagandaType;
  13. use App\Form\DispositivoAlterarFirebaseTokenType;
  14. use App\Form\DispositivoSavePackageType;
  15. use App\Form\DispositivoType;
  16. use App\Repository\DispositivoRepository;
  17. use App\Service\DispositivoService;
  18. use App\Service\NotificationService;
  19. use FOS\RestBundle\Context\Context;
  20. use FOS\RestBundle\Controller\Annotations as Rest;
  21. use Psr\Log\LoggerInterface;
  22. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  23. use Symfony\Component\HttpFoundation\Request;
  24. use Symfony\Component\HttpFoundation\Response;
  25. use Symfony\Component\Routing\Annotation\Route;
  26. /**
  27.  * @Route("/api", name="api_")
  28.  */
  29. class DispositivoController extends AbstractAppController
  30. {
  31.     private $notificationService;
  32.     public function __construct(LoggerInterface $loggerDispositivoRepository $repositoryDispositivoService $serviceNotificationService $notificationService)
  33.     {
  34.         $this->entity = new Dispositivo();
  35.         $this->repository $repository;
  36.         $this->formType DispositivoType::class;
  37.         $this->service $service;
  38.         $this->logger $logger;
  39.         $this->notificationService $notificationService;
  40.     }
  41.     /**
  42.      * @Rest\Get("/dispositivo")
  43.      */
  44.     public function list(): Response
  45.     {
  46.         return parent::list();
  47.     }
  48.     /**
  49.      * @Rest\Get("/dispositivo/{selector}")
  50.      * @ParamConverter("entity", class="App\Entity\Dispositivo")
  51.      */
  52.     public function show(EntityInterface $entity): Response
  53.     {
  54.         return parent::show($entity);
  55.     }
  56.     /**
  57.      * @Rest\Post("/dispositivo")
  58.      */
  59.     public function new(Request $request): Response
  60.     {
  61.         $entity $this->entity;
  62.         $entity $this->dispositivoNewPreHydrateEntity($entity);
  63.         $form $this->createForm($this->formType$entity);
  64.         $data json_decode($request->getContent(), true);
  65.         $form->submit($data);
  66.         if ($form->isSubmitted() && $form->isValid()) {
  67.             try {
  68.                 $this->service->criar($entity);
  69.             } catch (\Exception $e) {
  70.                 $this->logger->error($e->getMessage());
  71.                 return $this->handleView($this->view([], Response::HTTP_BAD_REQUEST));
  72.             }
  73.             $view $this->view($entityResponse::HTTP_CREATED);
  74.             $context = new Context();
  75.             $context->addGroup('new');
  76.             $view->setContext($context);
  77.             return $this->handleView($view);
  78.         }
  79.         return $this->handleView($this->view($form->getErrors(), Response::HTTP_BAD_REQUEST));
  80.     }
  81.     // Neste caso, deve ser possivel trocar o usuario, desde que o novo nao seja um device
  82.     // Essa regra nao se aplica as demais entidades, por isso nao foi feito overwrite nem alteracao na class pai
  83.     protected function dispositivoNewPreHydrateEntity(EntityInterface $entity): EntityInterface
  84.     {
  85.         // Se a entidade depende de usuario, utiliza a referencia do usuario "logado", desde que nao seja um "usuario dispositivo"
  86.         if (($entity instanceof UsuarioDependenteInterface)
  87.             && (false === $this->getUser()->isDispositivo())
  88.         ) {
  89.             $entity->setUsuario($this->getUser());
  90.         }
  91.         // Se a entidade depende de contrato, utiliza a referencia de contrato do usuario "logado", desde que nao seja um "usuario dispositivo"
  92.         if (($entity instanceof ContratoDependenteInterface)
  93.             && (false === $this->getUser()->isDispositivo())
  94.             && ($this->getUser()->getContrato() instanceof Contrato)
  95.         ) {
  96.             $entity->setContrato($this->getUser()->getContrato());
  97.         }
  98.         return $entity;
  99.     }
  100.     /**
  101.      * @Rest\Get("/dispositivo/{selector}/status")
  102.      * @ParamConverter("entity", class="App\Entity\Dispositivo")
  103.      */
  104.     public function status(Dispositivo $entity): Response
  105.     {
  106.         $statusCodeMessage AppResponse::getMessage($entity->getStatus());
  107.         return $this->handleView($this->view($statusCodeMessage));
  108.     }
  109.     
  110.     /**
  111.      * @Rest\Get("/dispositivo/{selector}/status/bloqueio")
  112.      * @ParamConverter("entity", class="App\Entity\Dispositivo")
  113.      */
  114.     public function bloqueio(Dispositivo $entity): Response
  115.     {
  116.         $statusCodeMessage AppResponse::getMessageBloqueio($entity->getBloqueio());
  117.         
  118.         $ultimaMensagemBloqueio $entity->getUltimaMensagemBloqueio();
  119.         
  120.         if ($statusCodeMessage['code'] == Dispositivo::BLOQUEADO && !empty($ultimaMensagemBloqueio)) {
  121.             $statusCodeMessage['message'] = $ultimaMensagemBloqueio;
  122.         }
  123.         return $this->handleView($this->view($statusCodeMessage));
  124.     }
  125.     /**
  126.      * @Rest\Put("/dispositivo/{selector}/alterar_senha")
  127.      * @ParamConverter("entity", class="App\Entity\Dispositivo")
  128.      */
  129.     public function alterarSenha(Request $requestDispositivo $entity): Response
  130.     {
  131.         $this->formType DispositivoAlterarSenhaType::class;
  132.         $result parent::edit($request$entity);
  133.         $this->notificationService->sendDownloadSenha($entity);
  134.         return $result;
  135.     }
  136.     /**
  137.      * @Rest\Get("/dispositivo/{selector}/package")
  138.      * @ParamConverter("entity", class="App\Entity\Dispositivo")
  139.      */
  140.     public function listPackages(Dispositivo $entity): Response
  141.     {
  142.         return $this->handleView($this->view($entity->getPackages()));
  143.     }
  144.     /**
  145.      * @Rest\Put("/dispositivo/{selector}/desativar")
  146.      * @ParamConverter("entity", class="App\Entity\Dispositivo")
  147.      */
  148.     public function desativar(Dispositivo $entity): Response
  149.     {
  150.         try {
  151.             $this->service->desativar($entity);
  152.         } catch (\Exception $e) {
  153.             $this->logger->error($e->getMessage());
  154.             return $this->handleView($this->view($e->getMessage(), Response::HTTP_BAD_REQUEST));
  155.         }
  156.         $this->notificationService->sendDownloadStatus($entity);
  157.         return $this->handleView($this->view($entityResponse::HTTP_OK));
  158.     }
  159.     /**
  160.      * @Rest\Put("/dispositivo/{selector}/ativar")
  161.      * @ParamConverter("entity", class="App\Entity\Dispositivo")
  162.      */
  163.     public function ativar(Dispositivo $entity): Response
  164.     {
  165.         try {
  166.             $this->service->ativar($entity);
  167.         } catch (\Exception $e) {
  168.             $this->logger->error($e->getMessage());
  169.             return $this->handleView($this->view($e->getMessage(), Response::HTTP_BAD_REQUEST));
  170.         }
  171.         $this->notificationService->sendDownloadStatus($entity);
  172.         return $this->handleView($this->view($entityResponse::HTTP_OK));
  173.     }
  174.     /**
  175.      * @Rest\Get("/dispositivo/{selector}/senha")
  176.      * @ParamConverter("entity", class="App\Entity\Dispositivo")
  177.      */
  178.     public function showSenha(Dispositivo $entity): Response
  179.     {
  180.         $view $this->view($entityResponse::HTTP_OK);
  181.         $context = new Context();
  182.         $context->addGroup('senha');
  183.         $view->setContext($context);
  184.         return $this->handleView($view);
  185.     }
  186.     /**
  187.      * @Rest\Post("/dispositivo/{selector}/package")
  188.      * @ParamConverter("entity", class="App\Entity\Dispositivo")
  189.      */
  190.     public function addPackages(Request $requestDispositivo $entity): Response
  191.     {
  192.         $this->formType DispositivoSavePackageType::class;
  193.         $form $this->createForm($this->formType$entity);
  194.         $data json_decode($request->getContent(), true);
  195.         if (null === $data) {
  196.             return $this->handleView($this->view('JSON - Error - Not Valid'Response::HTTP_BAD_REQUEST));
  197.         }
  198.         $form->submit($data);
  199.         if ($form->isSubmitted() && $form->isValid()) {
  200.             $em $this->getDoctrine()->getManager();
  201.             $em->persist($entity);
  202.             $em->flush();
  203.             return $this->handleView($this->view([], Response::HTTP_OK));
  204.         }
  205.         return $this->handleView($this->view($form->getErrors(), Response::HTTP_BAD_REQUEST));
  206.     }
  207.     /**
  208.      * @Rest\Get("/dispositivo/{selector}/package_context")
  209.      * @ParamConverter("entity", class="App\Entity\Dispositivo")
  210.      */
  211.     public function listPackagesContext(Dispositivo $entity): Response
  212.     {
  213.         $em $this->getDoctrine()->getManager();
  214.         $packageListSistema $em->getRepository(PackageSistema::class)->findAll();
  215.         $packageListContrato $entity->getContrato()->getPackages()->toArray();
  216.         $packageListDispositivo $entity->getPackages()->toArray();
  217.         $packageManager = new PackageManager();
  218.         $packageManager->addPackageList($packageListSistemaPackageManager::SISTEMA);
  219.         $packageManager->addPackageList($packageListContratoPackageManager::CONTRATO);
  220.         $packageManager->addPackageList($packageListDispositivoPackageManager::DISPOSITIVO);
  221.         return $this->handleView($this->view($packageManager->getList()));
  222.     }
  223.     /**
  224.      * @Rest\Put("/dispositivo/{selector}/alterar_identificador_propaganda")
  225.      * @ParamConverter("entity", class="App\Entity\Dispositivo")
  226.      */
  227.     public function alterarIdentificadorPropaganda(Request $requestDispositivo $entity): Response
  228.     {
  229.         $this->formType DispositivoAlterarIdentificadorPropagandaType::class;
  230.         // Se nao é um token do mesmo dispositivo, nao executa a alteracao
  231.         if ($entity->getSelector() != $this->getUser()->getUsername()) {
  232.             return $this->handleView($this->view([], Response::HTTP_BAD_REQUEST));
  233.         }
  234.         $result parent::edit($request$entity);
  235.         return $result;
  236.     }
  237.     
  238.     /**
  239.      * @Rest\Put("/dispositivo/{selector}/bloquear/{msg}")
  240.      * @ParamConverter("entity", class="App\Entity\Dispositivo")
  241.      */
  242.     public function bloquear(Dispositivo $entityString $msg): Response
  243.     {        
  244.         try {
  245.             $this->service->bloquear($entity$msg);
  246.         } catch (\Exception $e) {
  247.             $this->logger->error($e->getMessage());
  248.             return $this->handleView($this->view($e->getMessage(), Response::HTTP_BAD_REQUEST));
  249.         }
  250.         $this->notificationService->sendDownloadBloqueio($entity);
  251.         return $this->handleView($this->view($entityResponse::HTTP_OK));
  252.     }
  253.     
  254.     /**
  255.      * @Rest\Put("/dispositivo/{selector}/desbloquear")
  256.      * @ParamConverter("entity", class="App\Entity\Dispositivo")
  257.      */
  258.     public function desbloquear(Dispositivo $entity): Response
  259.     {
  260.         try {            
  261.             $this->service->desbloquear($entity);            
  262.         } catch (\Exception $e) {
  263.             $this->logger->error($e->getMessage());
  264.             return $this->handleView($this->view($e->getMessage(), Response::HTTP_BAD_REQUEST));
  265.         }
  266.         
  267.         $this->notificationService->sendDownloadDesbloqueio($entity);
  268.         return $this->handleView($this->view($entityResponse::HTTP_OK));
  269.     }
  270.     
  271.     /**
  272.      * @Rest\Put("/dispositivo/{selector}/alterar_firebase_token")
  273.      * @ParamConverter("entity", class="App\Entity\Dispositivo")
  274.      */
  275.     public function alterarFirebaseToken(Request $requestDispositivo $entity): Response
  276.     {
  277.         $this->formType DispositivoAlterarFirebaseTokenType::class;
  278.         $result parent::edit($request$entity);
  279.         
  280.         return $result;
  281.     }
  282.     
  283. }