<?php
namespace App\Controller;
use App\Model\User;
use App\Repository\NewsRepository;
use App\Service\News\ChartFormatter;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
use Symfony\Contracts\Cache\ItemInterface;
/**
* Class DefaultController
*
* @package App\Controller
*
*/
class DefaultController extends AbstractController
{
/**
* @var NewsRepository
*/
private $newsRepository;
public function __construct(NewsRepository $newsRepository)
{
$this->newsRepository = $newsRepository;
}
/**
* @Route("/", name="HOMEPAGE")
*/
public function index(): Response
{
/** @var User $user */
$user = $this->getUser();
$email = $this->getUser()->getEmail();
$cache = new FilesystemAdapter();
$beta = INF;
$key = md5('chartNewsByMonth' . $email);
$newsByMOnth = $cache->get($key, function (ItemInterface $item) {
$item->expiresAfter(3600 * 6);
return $this->newsRepository->getNewsByMonthForChart();
}, $beta);
$key = md5('chartNewsByTarget' . $email);
$newsByTarget = $cache->get($key, function (ItemInterface $item) {
$item->expiresAfter(3600 * 6);
return $this->newsRepository->getNewsByType();
}, $beta);
$key = md5('chartNewsByCategory' . $email);
$newsByCategory = $cache->get($key, function (ItemInterface $item) {
$item->expiresAfter(3600 * 6);
return $this->newsRepository->getNewsByCategory();
}, $beta);
return $this->render('default/index.html.twig', [
'chart' => [
'newsByMonth' => ChartFormatter::getNewsByMonth($newsByMOnth),
'newsByTarget' => ChartFormatter::getNewsByTargets($newsByTarget, $user),
'newsByCategory' => ChartFormatter::getNewsByCategory($newsByCategory),
],
]);
}
/**
* @Route("/test-user", name="TEST_USER", methods={"GET"})
* @IsGranted("ROLE_USER")
* @return Response
*/
public function testUser(): Response
{
return $this->render('default/test-user.html.twig', []);
}
}