<?php
declare(strict_types=1);
namespace App\Controller;
use App\Channels\L2L;
use App\Model\Property;
use App\Providers\DirectorProvider;
use App\Providers\MyroomsProvider;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Swagger\Annotations as SWG;
use Nelmio\ApiDocBundle\Annotation\Model;
use Nelmio\ApiDocBundle\Annotation\Security;
/**
* @Route("/api")
*
* @SWG\Parameter(
* name="Authorization",
* in="header",
* required=true,
* type="string",
* default="Bearer {TOKEN}",
* description="Bearer {token}",
* )
*/
class ApiPullController extends AbstractController
{
/**
* @Route("/check", name="api_check", methods={"GET"})
*
* @SWG\Response(
* response=200,
* description="Returns username"
* )
* @SWG\Tag(name="User")
* @Security(name="Bearer")
*/
public function check()
{
return new JsonResponse(['username' => $this->getUser()->getUsername()]);
}
/**
* @Route("/ads", name="api_ads", methods={"GET"})
*
* @SWG\Response(
* response=200,
* description="Returns all ads",
* @SWG\Schema(
* type="array",
* @SWG\Items(ref=@Model(type=App\Model\PropertyJson::class))
* )
* )
* @SWG\Tag(name="Ads")
* @Security(name="Bearer")
*/
public function all(Request $request, DirectorProvider $directorProvider, MyroomsProvider $myroomsProvider)
{
$page = (int)$request->query->get('page', 1);
$limit = (int)$request->query->get('limit', 9999);
$propertiesDetails = [];
$properties = $directorProvider->getProperties($page, $limit);
foreach($properties->getProperties() as $property) {
$property = $myroomsProvider->getProperty($property->getId(), false);
if($property instanceof Property) {
$propertiesDetails[] = $property;
}
usleep(10000); // avoid 429 error
}
return new JsonResponse($propertiesDetails);
}
/**
* @Route("/ads/{id}", name="api_ad", methods={"GET"})
*
* @SWG\Response(
* response=200,
* description="Returns single ad",
* @Model(type=App\Model\PropertyJson::class)
* )
* @SWG\Tag(name="Ads")
* @Security(name="Bearer")
*/
public function ad(int $id, MyroomsProvider $myroomsProvider)
{
$property = $myroomsProvider->getProperty($id);
return new JsonResponse($property);
}
public function isAvailable()
{
}
}