src/Service/Cart/CartService.php line 66
<?phpnamespace App\Service\Cart;use App\Entity\Product;use Doctrine\ORM\EntityManagerInterface;use Symfony\Component\HttpFoundation\RequestStack;class CartService{private RequestStack $session;private EntityManagerInterface $manager;public function __construct(RequestStack $session, EntityManagerInterface $manager){$this->session = $session;$this->manager = $manager;}public function add(int $id, int $quantity): bool{$cart = $this->session->getSession()->get('cart', []);$product = $this->manager->getRepository(Product::class)->find($id);if(!$product) {return false;}$maxQuantity = $product->getProductQuantity();$currentQuantity = $cart[$id] ?? 0;$quantityToAdd = $quantity;if ($currentQuantity + $quantityToAdd > $maxQuantity) {return false;}if($quantityToAdd > 0){if(array_key_exists($id, $cart)) {$cart[$id] += $quantityToAdd;} else {$cart[$id] = $quantityToAdd;}$this->session->getSession()->set('cart', $cart);return true;}else{return false;}}public function remove(int $id): void{$cart = $this->session->getSession()->get('cart', []);if(array_key_exists($id, $cart)) {unset($cart[$id]);}$this->session->getSession()->set('cart', $cart);}public function getCart(): array{$cart = $this->session->getSession()->get('cart', []);$cartWithData = [];foreach ($cart as $id => $quantity) {$product = $this->manager->getRepository(Product::class)->find($id);$images = $product->getImages();if ($images !== null && count($images) > 0) {$img = $images[0]->getImageName();} else {$img = "default.png";}$cartWithData[] = ['product' => $product,'quantity' => $quantity,'image' => $img];}return $cartWithData;}public function getTotal(): float{$cartTotal = 0;foreach ($this->getCart() as $item) {$cartTotal += $item['product']->getProductPrice() * $item['quantity'];}return $cartTotal;}public function emptyCart(): void{$this->session->getSession()->remove('cart');}public function updateQuantity(int $productId, $quantity): void{$cart = $this->session->getSession()->get('cart', []);if(array_key_exists($productId, $cart)) {$cart[$productId] = $quantity;}$this->session->getSession()->set('cart', $cart);}}