<?php
namespace App\Controller\Api\Promotion;
use App\Dto\Authorization\AuthorizationHeaderDto;
use App\EventListener\Api\TokenInterceptor\MybizTokenAuthenticatorInterface;
use App\Service\Authorization\MybizRequestJwtChecker;
use App\Service\PromoSystem\PromoSystemProvider;
use App\Traits\DateRequestTrait;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class PromoApiController extends AbstractController implements MybizTokenAuthenticatorInterface
{
use DateRequestTrait;
/**
* @Route("/v1/promo/current-promotions", methods={"GET"}, name="api_promo_current_promotions", options={"expose": "true"})
*/
public function productPurchaseLink(
Request $request,
MybizRequestJwtChecker $mybizRequestJwtChecker,
PromoSystemProvider $promoSystemProvider
): Response
{
// On peut provenir ici avec un membre déjà existant, auquel cas on va utiliser son marché + savoir s'il a déjà commandé pour lui proposer un autre tarif
try {
$member = $mybizRequestJwtChecker->checkJwt($request);
} catch (\Throwable $e) {
$member = null;
}
$date = $this->getDateFromRequest($request);
$authorizationHeaderDto = AuthorizationHeaderDto::generateFromRequest($request);
try {
$promos = $promoSystemProvider->getPromosToDisplay($authorizationHeaderDto->getName(), $date);
return $this->json($promos);
} catch (\Throwable $e) {
return $this->json([
"error" => $e->getMessage()
], Response::HTTP_BAD_REQUEST);
}
}
}