|
1
|
|
|
<?php |
|
2
|
|
|
|
|
3
|
|
|
namespace App\Controller; |
|
4
|
|
|
|
|
5
|
|
|
use App\Enum\PropertyType; |
|
6
|
|
|
use App\Enum\Provider; |
|
7
|
|
|
use App\Exception\UrlBuilderNotFoundException; |
|
8
|
|
|
use App\Factory\ProviderUrlFactory; |
|
9
|
|
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; |
|
10
|
|
|
use Symfony\Component\HttpFoundation\JsonResponse; |
|
11
|
|
|
use Symfony\Component\HttpFoundation\Request; |
|
12
|
|
|
use Symfony\Component\Routing\Annotation\Route; |
|
13
|
|
|
|
|
14
|
|
|
#[Route("/provider")] |
|
15
|
|
|
class ProviderController extends AbstractController |
|
16
|
|
|
{ |
|
17
|
|
|
public function __construct( |
|
18
|
|
|
private ProviderUrlFactory $urlFactory |
|
19
|
|
|
) {} |
|
20
|
|
|
|
|
21
|
|
|
#[Route("/result-urls", name: "provider_result_urls", options: ["expose" => true], methods: ["GET"])] |
|
22
|
|
|
public function getResultUrls(Request $request): JsonResponse |
|
23
|
|
|
{ |
|
24
|
|
|
$params = $request->query->all(); |
|
25
|
|
|
$city = $params['city']; |
|
26
|
|
|
$types = isset($params['types']) ? array_keys($params['types']) : PropertyType::getAvailableValues(); |
|
27
|
|
|
$minPrice = $params['min_price'] ?? null; |
|
28
|
|
|
$maxPrice = $params['max_price']; |
|
29
|
|
|
$minArea = $params['min_area'] ?? null; |
|
30
|
|
|
$maxArea = $params['max_area'] ?? null; |
|
31
|
|
|
$minRoomsCount = $params['min_rooms_count']; |
|
32
|
|
|
$urls = []; |
|
33
|
|
|
|
|
34
|
|
|
foreach (Provider::getAvailableValues() as $providerName) { |
|
35
|
|
|
try { |
|
36
|
|
|
$urls[] = $this->urlFactory->create($providerName, $city, $types, $minPrice, $maxPrice, $minArea, $maxArea, $minRoomsCount); |
|
37
|
|
|
// TODO: process ParuVendu |
|
38
|
|
|
} catch (UrlBuilderNotFoundException) { |
|
39
|
|
|
continue; |
|
40
|
|
|
} |
|
41
|
|
|
} |
|
42
|
|
|
|
|
43
|
|
|
return $this->json($urls); |
|
44
|
|
|
} |
|
45
|
|
|
} |
|
46
|
|
|
|