<?php
namespace App\Controller;
use App\Services\Api\Attraction\AttractionService;
use App\Services\Api\Category\CategoryService;
use App\Services\FakeDataService;
use Exception;
use Psr\Cache\InvalidArgumentException;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class ServicesController extends AbstractController
{
private FakeDataService $fakeDataService;
private AttractionService $attractionService;
private CategoryService $categoryService;
private LoggerInterface $logger;
/**
* @param FakeDataService $fakeDataService
* @param AttractionService $attractionService
* @param CategoryService $categoryService
* @param LoggerInterface $logger
*/
public function __construct(FakeDataService $fakeDataService, AttractionService $attractionService, CategoryService $categoryService, LoggerInterface $logger)
{
$this->fakeDataService = $fakeDataService;
$this->attractionService = $attractionService;
$this->categoryService = $categoryService;
$this->logger = $logger;
}
/**
* @throws InvalidArgumentException
*/
#[Route('/categorie/{category}/{name}', name: 'app_coin_by_category')]
public function index(Request $request, $category, $name): Response
{
$page = $request->query->getInt('page', 1);
$attractions = $this->attractionService->getAttractionByCategory((int)$category, $page);
$paginationAttraction = $attractions['hydra:view'];
$pagination = [];
if (isset($paginationAttraction['hydra:first'])){
$pagination['first'] = explode('page=',$paginationAttraction['hydra:first'])[1];
$pagination['last'] = explode('page=',$paginationAttraction['hydra:last'])[1];
}
return $this->render('frontend/services/coinByCategory.html.twig', [
'attractions' => $attractions,
'category' => $this->categoryService->getCategory((int)$category),
'page' => $page,
'pagination' => $pagination
]);
}
/**
* @throws InvalidArgumentException
* @throws Exception
*/
#[Route('/attractions/{id}', name: 'app_services_attraction')]
public function coin($id): Response
{
$review = $this->attractionService->getReviewByAttraction($id)->toArray();
$attraction = $this->attractionService->getAttractionById($id);
$data = $this->fakeDataService->get();
$body = $data['restauration'][0] ?? [];
// dd($attraction);
return $this->render('frontend/services/coin.html.twig', [
'attraction' => $attraction,
'coin' => $body,
'reviews' => $review,
'category' => 'restauration'
]);
}
#[Route('/review/{attractionId}', name: 'app_review')]
public function review($attractionId,Request $request){
if ($request->isMethod('POST')){
$rate = $request->request->get('rate');
$comment = $request->request->get('comment');
$body = [
'rate' => $rate,
'comment' => $comment,
'attraction_id' => $attractionId
];
try {
$response = $this->attractionService->postReview($body);
dd($response);
$this->addFlash('success', 'Votre avis a été envoyé avec succès');
}catch (Exception $exception){
$this->addFlash('danger', 'Erreur: Vous avez déja creer un review/ vous ne pouvez pas créer un review');
$this->logger->error('erreur lors de la création du review sur l\'attraction ' . $attractionId . $exception->getMessage());
}
}
}
}