<?php
declare(strict_types=1);
namespace App\Action\Product;
use App\Module\Inquiry\Business\Builder\InquiryDataBuilder;
use App\Provider\VariantStructuredDataBuilder;
use Denios\Data\Product\Product;
use Denios\Data\Product\Variant;
use Psr\Log\LoggerInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
/**
* Get product detail
*
* @author Michel Chowanski <michel.chowanski@bestit-online.de>
* @package App\Action\Product
*/
class GetDetailAction
{
public const PAGE_TYPE_PRODUCT = 'product';
private InquiryDataBuilder $inquiryDataBuilder;
private VariantStructuredDataBuilder $structuredDataBuilder;
private LoggerInterface $logger;
public function __construct(InquiryDataBuilder $inquiryDataBuilder, LoggerInterface $logger,VariantStructuredDataBuilder $structuredDataBuilder)
{
$this->inquiryDataBuilder = $inquiryDataBuilder;
$this->logger = $logger;
$this->structuredDataBuilder = $structuredDataBuilder;
}
/**
* Get product detail
*
* @Template(template="pages/product/get_detail.html.twig")
*
* @return array
*/
public function __invoke(Product $product, Variant $variant): array
{
if(isset($variant->structuredData)){
$variantStructuredData = $variant->structuredData->toArray();
} else {
$this->logger->warning('SKU: '.$product->id.' has no structured Data, use slow fallback');
$variantStructuredData = $this->structuredDataBuilder->buildStructuredDataByVariant($variant);
}
return [
'product' => $product,
'variant' => $variant,
'page_type' => self::PAGE_TYPE_PRODUCT,
'variantStructuredData' => $variantStructuredData,
'structuredProducts' => $this->inquiryDataBuilder->buildFromVariant($variant)
];
}
}