<?php
declare(strict_types=1);
namespace Slivki\MessageHandler\Query\Partner\Order;
use DateTimeImmutable;
use League\Period\Period;
use Slivki\Dao\Director\DirectorDaoInterface;
use Slivki\Dao\Partner\History\PartnerHistoryDaoInterface;
use Slivki\Message\Query\Partner\Order\GetPartnerOnlineOrderLiveQuery;
use Slivki\Response\Partner\Order\GetPartnerOnlineLiveResponse;
use Slivki\Services\Partner\PartnerUserService;
use Slivki\Services\UserGetter;
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
final class GetPartnerOnlineLiveHandler implements MessageHandlerInterface
{
private PartnerHistoryDaoInterface $partnerHistoryDao;
private PartnerUserService $partnerUserService;
private UserGetter $userGetter;
private DirectorDaoInterface $directorDao;
public function __construct(
PartnerHistoryDaoInterface $partnerHistoryDao,
PartnerUserService $partnerUserService,
UserGetter $userGetter,
DirectorDaoInterface $directorDao
) {
$this->partnerHistoryDao = $partnerHistoryDao;
$this->partnerUserService = $partnerUserService;
$this->userGetter = $userGetter;
$this->directorDao = $directorDao;
}
public function __invoke(GetPartnerOnlineOrderLiveQuery $query): GetPartnerOnlineLiveResponse
{
$user = $this->userGetter->get();
$directorUser = $this->partnerUserService->getDirectorUserByLoggedUser($user);
$period = new Period(
new DateTimeImmutable('-24 hours'),
new DateTimeImmutable('now'),
Period::INCLUDE_ALL,
);
$orders = $this->partnerHistoryDao->getOnlineOrderHistory($period, $this->directorDao->getDirectorIdByEmail($directorUser->getEmail()));
return new GetPartnerOnlineLiveResponse($orders->getOnlineOrders());
}
}