Advertisement
luanoliveira

ResourceController

May 7th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.24 KB | None | 0 0
  1. <?php
  2.  
  3. namespace Lojas\Controller;
  4.  
  5. use Lojas\Model\Loja;
  6. use Lojas\Model\Aplicativo;
  7. use Symfony\Component\HttpFoundation\JsonResponse;
  8.  
  9. class ResourceController extends \Mix\Controller\Controller
  10. {
  11.     protected $loja    = null;
  12.     protected $lojaUrl = null;
  13.    
  14.     public function init()
  15.     {
  16.         parent::init();
  17.         $this->lojaUrl = $this->getRequest()->attributes->get('loja');
  18.         $this->loja    = Loja::findLojaByUrl($this->lojaUrl);        
  19.     }
  20.  
  21.     public function before($action, $loja, $application)
  22.     {
  23.         $lojaId = $this->loja->id();
  24.         $request = $this->getRequest();
  25.         $accessToken = $request->query->get('access_token');
  26.         $appSecret = $request->query->get('app_secret');
  27.         $isValidAccessToken = Aplicativo::isValidAccessToken($accessToken, $lojaId, $appSecret);
  28.        
  29.         if (!$isValidAccessToken) {
  30.             // ERROR RESPONSE
  31.             return new JsonResponse([
  32.                 'error' => 'invalid_request',
  33.                 'error_description' => 'Requisição não é válida'
  34.             ], 400);
  35.         }
  36.     }
  37.    
  38.     public function pedidosAction()
  39.     {
  40.         $lojaId = $this->loja->id();
  41.         $request = $this->getRequest();
  42.         $page = intval($request->query->get('page', 1));
  43.         $perPage = intval($request->query->get('per_page', 10));
  44.  
  45.         $connection = \Mix\Model\Model::getConnection();
  46.         $query = $connection->createQueryBuilder();
  47.         $query->select('lp.*');
  48.         $query->from('lojas_pedidos', 'lp');
  49.         $query->where('lp.loja_id=:loja_id');
  50.         $query->leftJoin('lp', 'lojas_pedidos_produtos', 'lpp', 'lpp.pedido_id=lp.id');
  51.         $query->setParameter('loja_id', $lojaId);
  52.         $query->orderBy('lp.data_hora_pedido', 'DESC');
  53.  
  54.         $count = clone $query;
  55.         $count->resetQueryPart('select');
  56.         $count->resetQueryPart('groupBy');
  57.         $count->select('COUNT(DISTINCT lp.id) AS total');
  58.         $count = $count->execute()->fetch();
  59.         $total = intval($count['total']);
  60.  
  61.         $offset = ($page - 1) * $perPage;
  62.         $query->setFirstResult($offset);
  63.         $query->setMaxResults($perPage);        
  64.  
  65.         $data = $query->execute()->fetchAll();
  66.      
  67.         $totalPages = ceil($total / $perPage);
  68.  
  69.         return new JsonResponse([
  70.             'page' => $page,
  71.             'per_page' => $perPage,
  72.             'total_pages' => $totalPages,
  73.             'total_items' => $total,
  74.             'items' => $data
  75.         ]);
  76.     }
  77.  
  78.     public function pedidosItemsAction($pedidoId)
  79.     {
  80.         $lojaId = $this->loja->id();
  81.  
  82.         $connection = \Mix\Model\Model::getConnection();
  83.         $query = $connection->createQueryBuilder();
  84.         $query->select('lpp.*');
  85.         $query->from('lojas_pedidos_produtos', 'lpp');
  86.         $query->where('lpp.pedido_id=:pedido_id');
  87.         $query->join('lpp', 'lojas_pedidos', 'lp', 'lp.id=lpp.pedido_id AND lp.loja_id=:loja_id');
  88.         $query->setParameter('pedido_id', $pedidoId);
  89.         $query->setParameter('loja_id', $lojaId);
  90.         $query->orderBy('lpp.id', 'DESC');
  91.         $data = $query->execute()->fetchAll();
  92.        
  93.         return new JsonResponse([
  94.             'items' => $data
  95.         ]);
  96.     }
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement