<?php
declare(strict_types=1);
namespace Slivki\Controller\Api\OnlineOrder\Vendor;
use League\Period\Period;
use Slivki\Message\Query\Admin\Stat\GetOfferDailyStatisticQuery;
use Slivki\Messenger\Query\QueryBusInterface;
use Slivki\Request\Statistic\Admin\GetOfferDailyStatisticRequest;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Annotation\Route;
final class GetOfferDailyStatisticAction
{
private QueryBusInterface $queryBus;
public function __construct(QueryBusInterface $queryBus)
{
$this->queryBus = $queryBus;
}
/**
* @Route(
* "/api/online-order/vendor/stat/daily/{offerId}",
* requirements={"offerId"="\d+"},
* name="api_online_order_stat_daily_vendor_get",
* methods={"GET"}
* )
*/
public function __invoke(int $offerId, GetOfferDailyStatisticRequest $request): JsonResponse
{
$dateFrom = null !== $request->getDateFrom()
? \DateTimeImmutable::createFromFormat('!d.m.Y', $request->getDateFrom())
: new \DateTimeImmutable('today');
$dateTo = null !== $request->getDateTo()
? \DateTimeImmutable::createFromFormat('!d.m.Y', $request->getDateTo())->setTime(23,59,59)
: (new \DateTimeImmutable('today'))->setTime(23,59,59);
return new JsonResponse(
$this->queryBus->handle(new GetOfferDailyStatisticQuery(
$offerId,
new Period($dateFrom, $dateTo),
)),
);
}
}