ProductModel.php 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php
  2. namespace Models;
  3. class ProductModel
  4. {
  5. private \PDO $pdo;
  6. public function __construct()
  7. {
  8. $dbFile = $_ENV['DB_FILE'];
  9. $dbPath = __DIR__ . '/../' . $dbFile;
  10. $this->pdo = new \PDO("sqlite:" . $dbPath);
  11. $this->pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
  12. }
  13. public function getProducts(int $companyId): array
  14. {
  15. $stmt = $this->pdo->prepare("SELECT * FROM product WHERE company_id = :company_id AND product_flag = 'a'");
  16. $stmt->execute(['company_id' => $companyId]);
  17. $products = $stmt->fetchAll(\PDO::FETCH_ASSOC);
  18. foreach ($products as &$product) {
  19. $product['product_is_kitchen'] = (bool) $product['product_is_kitchen'];
  20. }
  21. return $products;
  22. }
  23. public function createProduct(string $name, float $price, int $categoryId, int $companyId, bool $productIsKitchen): bool
  24. {
  25. $stmt = $this->pdo->prepare("INSERT INTO product (product_name, product_price, category_id, company_id, product_flag, product_is_kitchen)
  26. VALUES (:name, :price, :category_id, :company_id, 'a', :product_is_kitchen)");
  27. return $stmt->execute([
  28. 'name' => $name,
  29. 'price' => $price,
  30. 'category_id' => $categoryId,
  31. 'company_id' => $companyId,
  32. 'product_is_kitchen' => $productIsKitchen ? 1 : 0
  33. ]);
  34. }
  35. public function updateProduct(int $productId, int $companyId, ?string $productName = null, ?float $productPrice = null, ?bool $productIsKitchen = null): bool
  36. {
  37. $sql = "UPDATE product SET ";
  38. $params = [];
  39. $updates = [];
  40. if ($productName !== null) {
  41. $updates[] = "product_name = :product_name";
  42. $params['product_name'] = $productName;
  43. }
  44. if ($productPrice !== null) {
  45. $updates[] = "product_price = :product_price";
  46. $params['product_price'] = $productPrice;
  47. }
  48. if ($productIsKitchen !== null) {
  49. $updates[] = "product_is_kitchen = :product_is_kitchen";
  50. $params['product_is_kitchen'] = $productIsKitchen ? 1 : 0;
  51. }
  52. if (empty($updates)) {
  53. return false; // nada para atualizar
  54. }
  55. $sql .= implode(', ', $updates);
  56. $sql .= " WHERE product_id = :product_id AND company_id = :company_id AND product_flag = 'a'";
  57. $params['product_id'] = $productId;
  58. $params['company_id'] = $companyId;
  59. $stmt = $this->pdo->prepare($sql);
  60. return $stmt->execute($params);
  61. }
  62. public function deleteProduct(int $productId, int $companyId): bool
  63. {
  64. $stmt = $this->pdo->prepare("UPDATE product SET product_flag = 'd'
  65. WHERE product_id = :product_id AND company_id = :company_id AND product_flag = 'a'");
  66. return $stmt->execute(['product_id' => $productId, 'company_id' => $companyId]);
  67. }
  68. public function deleteProductByName(string $productName, int $companyId): bool
  69. {
  70. $stmt = $this->pdo->prepare("UPDATE product SET product_flag = 'd'
  71. WHERE product_name = :product_name AND company_id = :company_id AND product_flag = 'a'");
  72. return $stmt->execute(['product_name' => $productName, 'company_id' => $companyId]);
  73. }
  74. }