<?php
namespace App\Controller\Api;
use App\Repository\CompanyRepository;
use App\Repository\ProductRepository;
use App\Repository\NewsRepository;
use DateTime;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Serializer\SerializerInterface;
class NewsController extends AbstractController
{
private $companyRepository;
private $productRepository;
public function __construct(
CompanyRepository $companyRepository,
ProductRepository $productRepository,
LoggerInterface $logger
) {
$this->companyRepository = $companyRepository;
$this->productRepository = $productRepository;
$this->logger = $logger;
}
/**
* @Route("/api/news/{id}")
*/
public function getOneNews($id, NewsRepository $newsRepository, SerializerInterface $serializer)
{
$currentNews = $newsRepository->find($id);
// dump($currentNews);
$response = new Response();
$response->headers->set('Access-Control-Allow-Origin', '*');
$response->headers->set('Content-Type', 'application/json');
$response->setContent($serializer->serialize($currentNews, 'json'));
return $response;
}
/**
* @Route("/api/allNews", methods={"GET"})
*/
public function getAllNews(NewsRepository $newsRepository, SerializerInterface $serializer)
{
$news = $newsRepository->findall();
dump($news);
$response = new Response();
$response->headers->set('Access-Control-Allow-Origin', '*');
$response->headers->set('Content-Type', 'application/json');
$response->setContent($serializer->serialize($news, 'json'));
return $response;
}
/**
* @Route("/{_locale<en|fr|de|it|es>}/api/news/{filter}", methods={"GET"})
*/
public function getLatestCompaniesAndProducts($filter)
{
// Get date today
$today = new DateTime('today midnight');
// Date from which we want news
$date = clone $today;
// Companies and products
$newCompanies = [];
$newProducts = [];
// Get date based on filter (today, week, month, ...)
switch ($filter) {
case 'latest':
$date->modify("-7 days");
break;
case 'today':
$date = $today;
break;
case 'week':
$date->modify("-7 days");
break;
case 'month':
$date->modify("-30 days");
break;
case 'threeMonths':
$date->modify("-90 days");
break;
case 'sixMonths':
$date->modify("-180 days");
break;
}
$newCompanies = $this->companyRepository->findLatestCompanies($date);
$newProducts = $this->productRepository->findLatestProducts($date);
// Create Response array
$content = array(
'code' => Response::HTTP_OK,
'message' => 'Latest companies and products fetched successfully',
'companies' => $newCompanies,
'products' => $newProducts
);
// Return JSON
$response = new Response();
$response->headers->set('Access-Control-Allow-Origin', '*');
$response->headers->set('Content-Type', 'application/json');
$response->setStatusCode(200);
$response->setContent(json_encode($content));
return $response;
}
}