35 lines
1.2 KiB
PHP
35 lines
1.2 KiB
PHP
<?php
|
|
|
|
namespace Krzysiej\RyobiCrawler\Controller;
|
|
|
|
use Krzysiej\RyobiCrawler\Models\Product;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
use Symfony\Component\Routing\Attribute\Route;
|
|
use Twig\Error\LoaderError;
|
|
use Twig\Error\RuntimeError;
|
|
use Twig\Error\SyntaxError;
|
|
|
|
final class ProductController extends BaseController
|
|
{
|
|
/**
|
|
* @throws SyntaxError
|
|
* @throws RuntimeError
|
|
* @throws LoaderError
|
|
*/
|
|
#[Route('/product/{productId<\d+>}', name: 'app_product')]
|
|
public function __invoke(int $productId): Response
|
|
{
|
|
$product = Product::with([
|
|
'price' => fn($query) => $query->orderBy('created_at', 'desc'),
|
|
'stock' => fn($query) => $query->orderBy('created_at', 'desc'),
|
|
])->find($productId);
|
|
if(null === $product) {
|
|
throw $this->createNotFoundException('Product not found');
|
|
}
|
|
|
|
$priceList = $product->price()->pluck('price')->implode(',');
|
|
$priceDates = $product->price()->pluck('created_at')->map(fn($date) => $date->format('Y-m-d'))->implode("','");
|
|
return $this->render('product.html.twig', ['product' => $product, 'price_list' => $priceList, 'price_dates' => $priceDates]);
|
|
}
|
|
}
|