<?php
declare(strict_types=1);
namespace App\Controller\Cart;
use App\Controller\Traits\ExceptionTrait;
use App\Entity\User;
use App\Manager\CartManager;
use App\Repository\CartRepository;
use App\Serializer\Serializer;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Security;
/**
* @Route(
* "/cart",
* methods={"GET"}
* )
* Class GetController
* @package App\Controller\Cart
*/
class GetController
{
use ExceptionTrait;
public Serializer $serializer;
public CartManager $cartManager;
private CartRepository $cartRepository;
private GetByIdController $getByIdController;
private Security $security;
public function __construct(
Serializer $serializer,
CartManager $cartManager,
CartRepository $cartRepository,
GetByIdController $getByIdController,
Security $security
) {
$this->serializer = $serializer;
$this->cartManager = $cartManager;
$this->cartRepository = $cartRepository;
$this->getByIdController = $getByIdController;
$this->security = $security;
}
public function __invoke(Request $request): JsonResponse
{
try {
$user = $this->security->getUser();
$cart = null;
if ($user instanceof User) {
$cart = $this->cartRepository->userOf($user);
} elseif ($request->headers->has('Guest-Token')) {
$cart = $this->cartRepository->guestTokenOf($request->headers->get('Guest-Token'));
}
if ($cart !== null) {
return $this->getByIdController->__invoke($cart, $request);
}
return new JsonResponse(['message' => 'Pas de panier en cours'], Response::HTTP_NOT_FOUND);
} catch (\Throwable $e) {
return $this->exceptionOutput($e);
}
}
}