czydojade/src/Controller/Api/v1/DeparturesController.php
2020-01-11 13:05:32 +01:00

74 lines
2.0 KiB
PHP

<?php
namespace App\Controller\Api\v1;
use App\Controller\Controller;
use App\Model\Departure;
use App\Provider\DepartureRepository;
use App\Provider\StopRepository;
use Nelmio\ApiDocBundle\Annotation\Model;
use Swagger\Annotations as SWG;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
/**
* Class DeparturesController
*
* @Route("/departures")
* @SWG\Tag(name="Departures")
* @SWG\Parameter(ref="#/parameters/provider")
*/
class DeparturesController extends Controller
{
/**
* @Route("/{stop}", methods={"GET"})
* @SWG\Response(
* description="Gets departures from particular stop.",
* response=200,
* @SWG\Schema(type="array", @SWG\Items(ref=@Model(type=Departure::class)))
* )
*/
public function stop(DepartureRepository $departures, StopRepository $stops, $stop)
{
$stop = $stops->getById($stop);
return $this->json($departures->getForStop($stop));
}
/**
* @Route("/", methods={"GET"})
* @SWG\Response(
* description="Gets departures from given stops.",
* response=200,
* @SWG\Schema(type="array", @SWG\Items(ref=@Model(type=Departure::class)))
* )
*
* @SWG\Parameter(
* name="stop",
* description="Stop identifiers.",
* type="array",
* in="query",
* @SWG\Items(type="string")
* )
*
* @SWG\Parameter(
* name="limit",
* description="Max departures count",
* type="integer",
* in="query"
* )
*/
public function stops(DepartureRepository $departures, StopRepository $stops, Request $request)
{
$stops = $stops
->getManyById($request->query->get('stop'))
->flatMap([ $departures, 'getForStop' ])
->sortBy(function (Departure $departure) {
return $departure->getEstimated();
});
return $this->json($stops->values()->slice(0, (int)$request->query->get('limit', 8)));
}
}