src/Controller/ApiController.php line 29

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use EasyCorp\Bundle\EasyAdminBundle\Controller\AdminController as EasyAdminController;
  4. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  5. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use CodeItNow\BarcodeBundle\Utils\BarcodeGenerator;
  8. use Symfony\Component\HttpFoundation\JsonResponse;
  9. use App\Entity\User;
  10. use App\Entity\Promocao;
  11. use App\Entity\Banner;
  12. use App\Entity\Associado;
  13. use App\Entity\Avaliacao;
  14. use App\Entity\Textos;
  15. use App\Entity\Categoria;
  16. /**
  17.  * @Route("/api")
  18.  */
  19. class ApiController extends EasyAdminController
  20. {
  21.      /**
  22.      * @Route("/info", methods={"GET"})
  23.      */
  24.     public function infoAction(Request $request)
  25.     {   
  26.         $hoje = new \DateTime();
  27.         $response = [];
  28.         $queryBuilder $this->getDoctrine()
  29.                             ->getManagerForClass(User::class)
  30.                             ->createQueryBuilder()
  31.             ->select('partial entity.{id, username, nome, extraFields, logo, capa, dataInicio, notaAvaliacao}, categoria, avaliacoes')
  32.             ->from(User::class, 'entity')
  33.             ->leftJoin('entity.categoria','categoria')
  34.             ->leftJoin('entity.avaliacoes','avaliacoes')
  35.             ->andWhere('entity.enabled = 1')
  36.             ->andWhere("entity.roles like '%ROLE_CONVENIADO%'")
  37.             ->andWhere('entity.dataFim is null or entity.dataFim <= :hoje')
  38.             
  39.             ->setParameter('hoje'$hoje)
  40.             ->addOrderBy('entity.notaAvaliacao''DESC')
  41.             ;
  42.         $response['conveniados'] = $queryBuilder->getQuery()->getArrayResult();
  43.         $queryBuilder $this->getDoctrine()
  44.                             ->getManagerForClass(Promocao::class)
  45.                             ->createQueryBuilder()
  46.             ->select('entity, partial conveniado.{id, username, nome}, avaliacoes, associado')
  47.             ->from(Promocao::class, 'entity')
  48.             ->leftJoin('entity.conveniado','conveniado')
  49.             ->leftJoin('entity.avaliacoes','avaliacoes')
  50.             ->leftJoin('avaliacoes.associado','associado')
  51.             ->andWhere('entity.enabled = 1')
  52.             ;
  53.         $response['promocoes'] = $queryBuilder->getQuery()->getArrayResult();
  54.         $queryBuilder $this->getDoctrine()
  55.                             ->getManagerForClass(Banner::class)
  56.                             ->createQueryBuilder()
  57.                             ->select('entity')
  58.             ->from(Banner::class, 'entity')
  59.             ->andWhere('entity.enabled = 1')
  60.             ;
  61.         $response['banners'] = $queryBuilder->getQuery()->getArrayResult();
  62.         $queryBuilder $this->getDoctrine()
  63.             ->getManagerForClass(Categoria::class)
  64.             ->createQueryBuilder()
  65.             ->select('entity')
  66.             ->from(Categoria::class, 'entity')
  67.             ->addOrderBy('entity.nome''ASC')
  68.         ;
  69.         $response['categorias'] = $queryBuilder->getQuery()->getArrayResult();
  70.         /* textos */
  71.         $queryBuilder $this->getDoctrine()
  72.         ->getManagerForClass(Textos::class)
  73.         ->createQueryBuilder()
  74.         ->select('entity')
  75.         ->from(Textos::class, 'entity')
  76.         ->addOrderBy('entity.ordem''ASC')
  77.     ;
  78.     $response['textos'] = $queryBuilder->getQuery()->getArrayResult();
  79.         return new JsonResponse($response);
  80.     }
  81.     
  82.      /**
  83.      * @Route("/login", methods={"POST"})
  84.      */
  85.     public function loginAction(Request $request)
  86.     {   
  87.         $loginData = [ 
  88.             'cpf' => $request->request->get('cpf''0'),
  89.             'matricula' => $request->request->get('matricula''0'),
  90.         ];
  91.         $queryBuilder $this->getDoctrine()
  92.             ->getManagerForClass(Associado::class)
  93.             ->createQueryBuilder();
  94.             
  95.         $queryBuilder
  96.             ->select('entity')    
  97.             ->from(Associado::class, 'entity')
  98.             ->andWhere('entity.enabled = 1')
  99.             ->andWhere('entity.cpf = :cpf')->setParameter('cpf'$loginData['cpf'])
  100.             ->andWhere('entity.matricula = :matricula')->setParameter('matricula'$loginData['matricula'])
  101.         ;
  102.         $login $queryBuilder->getQuery()->getArrayResult();
  103.         if ($login) {
  104.             return new JsonResponse($login[0]);
  105.         }
  106.         return new JsonResponse(['message' => 'Login não encontrado'], 404);
  107.     }
  108.     /**
  109.      * @Route("/resgate/{promocao}/{associado}", methods={"POST"})
  110.      */
  111.     public function resgateAction(Request $requestPromocao $promocaoAssociado $associado )
  112.     {   
  113.         $avaliacaoRepo $this->getDoctrine()->getRepository(Avaliacao::class);
  114.         $avaliacoes $avaliacaoRepo->findBy([
  115.             'associado' => $associado,
  116.             'promocao' => $promocao
  117.         ]);
  118.         if (count($avaliacoes) > 0) {
  119.             return new JsonResponse(['message' => 'Você já resgatou essa promoção'], 404);
  120.         }
  121.         
  122.         $em $this->getDoctrine()->getManagerForClass(Avaliacao::class);
  123.         $avaliacao = new Avaliacao();
  124.         $avaliacao->setAssociado($associado);
  125.         $avaliacao->setPromocao($promocao);
  126.         $avaliacao->setConveniado($promocao->getConveniado());
  127.         $em->persist($avaliacao);
  128.         $em->flush();
  129.         return new JsonResponse(['message' => 'Promoção resgatada com sucesso!'], 200);
  130.     }
  131.     /**
  132.      * @Route("/avaliacao/{avaliacao}", methods={"POST"})
  133.      */
  134.     public function avaliacaoAction(Request $requestAvaliacao $avaliacao )
  135.     {   
  136.         $avaliacaoData = [ 
  137.             'nota' => $request->request->get('nota'0),
  138.             'comentario' => $request->request->get('comentario'null),
  139.         ];
  140.         if ($avaliacao->getEnabled() === false) {
  141.             $hoje = new \DateTime();
  142.             $avaliacao->setNota($avaliacaoData['nota']);
  143.             $avaliacao->setComentario($avaliacaoData['comentario']);
  144.             $avaliacao->setEnabled(true);
  145.             $avaliacao->setAvaliadoEm($hoje);
  146.             $em $this->getDoctrine()->getManagerForClass(Avaliacao::class);
  147.             $em->merge($avaliacao);
  148.             $em->flush();
  149.             $conveniado $avaliacao->getConveniado();
  150.             $avaliacaoRepo $this->getDoctrine()->getRepository(Avaliacao::class);
  151.             $avaliacoes $avaliacaoRepo->findBy([
  152.                 'conveniado' => $conveniado,
  153.                 'enabled' => true
  154.             ]);
  155.             $notaConveniado $notaAvaliacao 0;
  156.             if (count($avaliacoes) > ) {
  157.                 foreach($avaliacoes as $avaliacao) {
  158.                     $notaConveniado +=  $avaliacao->getNota();
  159.                 }
  160.                 $notaAvaliacao $notaConveniado count($avaliacoes);
  161.             }
  162.             $conveniado->setNotaAvaliacao($notaAvaliacao);
  163.             $em $this->getDoctrine()->getManagerForClass(User::class);
  164.             $em->merge($conveniado);
  165.             $em->flush();
  166.             
  167.             
  168.             return new JsonResponse(['message' => 'Promoção avaliada com sucesso!'], 200);
  169.         }
  170.         
  171.         return new JsonResponse(['message' => 'Promoção já avaliada!'], 404);
  172.     }
  173.     /**
  174.      * @Route("/avaliacoes/{associado}", methods={"GET"})
  175.      */
  176.     public function avaliacoesAction(Request $requestAssociado $associado )
  177.     {   
  178.      
  179.         $queryBuilder $this->getDoctrine()
  180.         ->getManagerForClass(Avaliacao::class)
  181.         ->createQueryBuilder();
  182.         
  183.     $queryBuilder
  184.         ->select('entity, promocao, partial conveniado.{id, username, nome}')    
  185.         ->from(Avaliacao::class, 'entity')
  186.         ->leftJoin('entity.associado','associado')
  187.         ->leftJoin('entity.promocao','promocao')
  188.         ->leftJoin('entity.conveniado','conveniado')
  189.         ->andWhere('associado.id = :associado')->setParameter('associado'$associado->getId())
  190.     ;
  191.     $avaliacoes $queryBuilder->getQuery()->getArrayResult();
  192.         return new JsonResponse($avaliacoes200);
  193.     }
  194. }