<?php
namespace App\BusApi;
use App\Entity\Bus\Route;
use Doctrine\Persistence\ManagerRegistry;
use Doctrine\Persistence\ObjectManager;
use FOS\RestBundle\Controller\AbstractFOSRestController;
use JMS\Serializer\SerializationContext;
use JMS\Serializer\SerializerBuilder;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Response;
use JMS\Serializer\Annotation as JMS;
use FOS\RestBundle\Controller\Annotations as Rest;
class BusRouteController extends AbstractFOSRestController
{
private ManagerRegistry $registry;
private ObjectManager $entityManager;
private RequestStack $requestStack;
public function __construct(ManagerRegistry $registry, RequestStack $requestStack)
{
$this->entityManager = $registry->getManager();
$this->requestStack = $requestStack;
}
/**
* @Rest\Route("/routes",methods={"GET","OPTIONS"}, name="apiRoutesHome")
*/
public function routesHome(Request $request)
{
$em = $this->entityManager;
$serializer = SerializerBuilder::create()->build();
$context = new SerializationContext();
$context->setSerializeNull(true)
->enableMaxDepthChecks();
// $routes = $em->getRepository(Route::class)->findAll();
$sql = "SELECT a.id as route_id,b.id as stop_id,c.station_name,b.departure_time,b.eta,d.station_name as origin_station, c.id as station_id FROM bus_route a
JOIN bus_stop b ON b.route_id = a.id
JOIN station c ON c.id = b.station_id
JOIN station d ON d.id = a.origin";
$stmt = $em->getConnection()->prepare($sql);
$routes = $stmt->executeQuery()->fetchAllAssociative();
$data = $serializer->serialize($routes, 'json', $context);
return new Response($data, Response::HTTP_OK);
}
}