71 lines
1.7 KiB
PHP
71 lines
1.7 KiB
PHP
<?php
|
|
namespace Domain\Product;
|
|
|
|
/**
|
|
* Repository odpowiedzialny za dostęp do danych produktów
|
|
*
|
|
* Zgodnie z wzorcem Repository Pattern, ta klasa enkapsuluje
|
|
* logikę dostępu do bazy danych dla produktów.
|
|
*/
|
|
class ProductRepository
|
|
{
|
|
/**
|
|
* @var \medoo Instancja Medoo ORM
|
|
*/
|
|
private $db;
|
|
|
|
/**
|
|
* Konstruktor - przyjmuje instancję bazy danych
|
|
*
|
|
* @param \medoo $db Instancja Medoo ORM
|
|
*/
|
|
public function __construct($db)
|
|
{
|
|
$this->db = $db;
|
|
}
|
|
|
|
/**
|
|
* Pobiera stan magazynowy produktu
|
|
*
|
|
* @param int $productId ID produktu
|
|
* @return int|null Ilość produktu lub null jeśli nie znaleziono
|
|
*/
|
|
public function getQuantity(int $productId): ?int
|
|
{
|
|
$quantity = $this->db->get('pp_shop_products', 'quantity', ['id' => $productId]);
|
|
|
|
// Medoo zwraca false jeśli nie znaleziono
|
|
return $quantity !== false ? (int)$quantity : null;
|
|
}
|
|
|
|
/**
|
|
* Pobiera produkt po ID
|
|
*
|
|
* @param int $productId ID produktu
|
|
* @return array|null Dane produktu lub null
|
|
*/
|
|
public function find(int $productId): ?array
|
|
{
|
|
$product = $this->db->get('pp_shop_products', '*', ['id' => $productId]);
|
|
return $product ?: null;
|
|
}
|
|
|
|
/**
|
|
* Aktualizuje ilość produktu
|
|
*
|
|
* @param int $productId ID produktu
|
|
* @param int $quantity Nowa ilość
|
|
* @return bool Czy aktualizacja się powiodła
|
|
*/
|
|
public function updateQuantity(int $productId, int $quantity): bool
|
|
{
|
|
$result = $this->db->update(
|
|
'pp_shop_products',
|
|
['quantity' => $quantity],
|
|
['id' => $productId]
|
|
);
|
|
|
|
return $result !== false;
|
|
}
|
|
}
|