<?php
namespace App\Infrastructure\Service;
use App\Helper\MonthLabelConverterHelper;
use App\Infrastructure\Traits\HydraTrait;
use GuzzleHttp\Client;
use GuzzleHttp\ClientInterface;
use JsonMapper\JsonMapperFactory;
use JsonMapper\JsonMapperInterface;
use Psr\Log\LoggerInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\Serializer\SerializerInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
/**
* AbstractService
*/
abstract class AbstractService
{
use HydraTrait;
/**
* @var string
*/
protected string $milkiyaBaseUrl;
/**
* @var LoggerInterface
*/
protected LoggerInterface $logger;
/**
* @var Security
*/
protected Security $security;
/**
* @var JsonMapperInterface
*/
protected JsonMapperInterface $mapper;
/**
* @var SessionInterface
*/
protected SessionInterface $session;
/**
* @var TranslatorInterface
*/
protected TranslatorInterface $translator;
/**
* @var MonthLabelConverterHelper
*/
protected MonthLabelConverterHelper $monthLabelConverterHelper;
/**
* @var ClientInterface
*/
protected ClientInterface $client;
/** @var SerializerInterface */
protected SerializerInterface $serializer;
/**
* @param string $milkiyaBaseUrl
* @param LoggerInterface $logger
* @param Security $security
* @param RequestStack $requestStack
* @param TranslatorInterface $translator
* @param MonthLabelConverterHelper $monthLabelConverterHelper
*/
public function __construct(
string $milkiyaBaseUrl,
LoggerInterface $logger,
Security $security,
RequestStack $requestStack,
TranslatorInterface $translator,
MonthLabelConverterHelper $monthLabelConverterHelper,
SerializerInterface $serializer
) {
$this->milkiyaBaseUrl = $milkiyaBaseUrl;
$this->logger = $logger;
$this->security = $security;
$this->session = $requestStack->getSession();
$this->mapper = (new JsonMapperFactory())->bestFit();
$this->requestStack = $requestStack;
$this->translator = $translator;
$this->monthLabelConverterHelper = $monthLabelConverterHelper;
$this->serializer = $serializer;
$this->setUpClient();
}
/**
* set up default parameters
*
* @return void
*/
private function setUpClient(): void
{
$token = '';
if ($this->isAuthenticated()) {
$token = $this->security->getUser()->getToken();
}
$this->client = new Client([
'headers' => [
'Content-Type' => 'application/json',
'Accept-Language' => $this->translator->getLocale(),
'Authorization' => "Bearer " . $token
],
'verify' => false,
'base_uri' => $this->milkiyaBaseUrl,
]);
}
private function isAuthenticated(): bool
{
if ($this->security->getUser()) {
return true;
}
return false;
}
}