Passed
Push — develop ( 991cd4...4c67f0 )
by Florian
04:17
created

ProviderController   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 30
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 18
c 1
b 0
f 0
dl 0
loc 30
ccs 0
cts 17
cp 0
rs 10
wmc 5

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A getResultUrls() 0 23 4
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