<?php
namespace App\Application\Service\ElasticSearch;
use App\Application\Service\Cache\CacheAdapterService;
use App\ViewManager\Landing\ViewService;
use Psr\Cache\InvalidArgumentException;
use Symfony\Component\HttpFoundation\RequestStack;
class ElasticSearchService
{
public const CACHE_NUM_PRODUCTS_FROM_ELASTICSEARCH = 'NumProductsFromElasticSearch_';
public const MAX_FEATURES_FILTER_SHOW = 14;
public const INDEX_FULL_PRODUCT = 1;
public const INDEX_ONLY_STOCK_AND_PRICE = 2;
public const DELETE_FROM_INDEX = 3;
public const ORDER_RANDOM_VALUE = 6;
public const INDEX_ONLY_BUYBOX_STATUS = 4;
private RequestStack $requestStack;
private CacheAdapterService $cacheAdapterService;
public function __construct(RequestStack $requestStack, CacheAdapterService $cacheAdapterService)
{
$this->requestStack = $requestStack;
$this->cacheAdapterService = $cacheAdapterService;
}
public function getResultsElasticSearch(string $lang, ?int $init, ?int $limit, int $ajax, array $filters, ?bool $wholesaler)
{
return \Tools::getResultsElasticSearch($lang, $init, $limit, $ajax, $filters, $wholesaler);
}
/**
* @return mixed
*
* @throws InvalidArgumentException
*/
public function getNumTotalProductsIndexedByElastic()
{
$langId = $this->requestStack->getSession()->get('id_lang');
if ($data = $this->cacheAdapterService->existCache(self::CACHE_NUM_PRODUCTS_FROM_ELASTICSEARCH.$langId)) {
return $data;
}
$limitProducts = ViewService::MAX_CATEGORY_PRODUCTS;
$lang = $this->requestStack->getSession()->get('lang');
$filters = $this->requestStack->getSession()->get('filters');
$filters = ($filters ?: ['order' => [6]]);
$ajax = $this->requestStack->getSession()->get('ajax') ?? 0;
$wholesaler = $this->requestStack->getSession()->get('is_wholesaler');
$result = $this->getResultsElasticSearch(
$lang,
0,
$limitProducts,
$ajax,
$filters,
$wholesaler
);
return $this->cacheAdapterService->getCache(self::CACHE_NUM_PRODUCTS_FROM_ELASTICSEARCH.$langId, $result);
}
public function getFilterValues(?array $filters): ?array
{
$filtered = [];
if (!empty($filters)) {
foreach ($filters as $item) {
$filtered[] = $item;
}
}
return $filtered;
}
}