Explorar el Código

feat: Menu Get Route

Fernando hace 4 meses
padre
commit
687f68cffa
Se han modificado 3 ficheros con 92 adiciones y 1 borrados
  1. 51 0
      controllers/MenuGetController.php
  2. 39 0
      models/MenuModel.php
  3. 2 1
      public/index.php

+ 51 - 0
controllers/MenuGetController.php

@@ -0,0 +1,51 @@
+<?php
+
+namespace Controllers;
+
+use Libs\ResponseLib;
+use Psr\Http\Message\ServerRequestInterface;
+use Models\MenuModel;
+
+class MenuGetController
+{
+    private MenuModel $model;
+
+    public function __construct()
+    {
+        $this->model = new MenuModel();
+    }
+
+    public function __invoke(ServerRequestInterface $request)
+    {
+        $companyId = $request->getAttribute('id');
+
+        if (!is_numeric($companyId) || (int)$companyId <= 0) {
+            return ResponseLib::sendFail("Parâmetro company_id inválido na URL", [], "E_VALIDATE")->withStatus(400);
+        }
+
+        $menuItems = $this->model->getMenu((int)$companyId);
+
+        if (!$menuItems) {
+            return ResponseLib::sendFail("Failed to retrieve menu", [], "E_DATABASE")->withStatus(500);
+        }
+
+        $cardapio = [];
+        foreach ($menuItems as $item) {
+            $categoria = $item['category_name'];
+            if (!isset($cardapio[$categoria])) {
+                $cardapio[$categoria] = [
+                    'categoria' => $categoria,
+                    'produtos' => []
+                ];
+            }
+
+            $cardapio[$categoria]['produtos'][] = [
+                'nome' => $item['product_name'],
+                'preco' => 'R$ ' . number_format((float)$item['product_price'], 2, ',', ''),
+                'descricao' => $item['description_text'] ?? ''
+            ];
+        }
+
+        return ResponseLib::sendOk(array_values($cardapio));
+    }
+}

+ 39 - 0
models/MenuModel.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace Models;
+
+class MenuModel
+{
+    private \PDO $pdo;
+
+    public function __construct()
+    {
+        $dbFile = $_ENV['DB_FILE'];
+        $dbPath = __DIR__ . '/../' . $dbFile;
+        $this->pdo = new \PDO("sqlite:" . $dbPath);
+        $this->pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
+    }
+
+    public function getMenu(int $companyId): array
+    {
+        $sql = "
+            SELECT 
+                c.category_name, 
+                p.product_name, 
+                p.product_price,
+                d.description_text
+            FROM product p
+            JOIN category c ON c.category_id = p.category_id
+            LEFT JOIN description d ON d.product_id = p.product_id AND d.company_id = p.company_id
+            WHERE p.company_id = :company_id 
+              AND p.product_flag != 'd' 
+              AND c.category_flag != 'd'
+            ORDER BY c.category_name, p.product_name
+        ";
+
+        $stmt = $this->pdo->prepare($sql);
+        $stmt->execute(['company_id' => $companyId]);
+
+        return $stmt->fetchAll(\PDO::FETCH_ASSOC);
+    }
+}

+ 2 - 1
public/index.php

@@ -84,6 +84,7 @@ $app->post('/order_item/get', $cors, $authJwt, \Controllers\OrderItemGetControll
 $app->post('/description/create', $cors, $authJwt, \Controllers\DescriptionCreateController::class);
 $app->post('/description/update', $cors, $authJwt, \Controllers\DescriptionUpdateController::class);
 
-
+//Cardapio Route
+$app->get('/menu/get/{id}', $cors, \Controllers\MenuGetController::class);
 
 $app->run();