Completed
Push — master ( 113af6...637f43 )
by WEBEWEB
58s
created

AdresseProvider::appendArray()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 13
rs 9.8333
c 0
b 0
f 0
cc 3
nc 3
nop 3
1
<?php
2
3
/*
4
 * This file is part of the geo-api-library package.
5
 *
6
 * (c) 2020 WEBEWEB
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace WBW\Library\GeoAPI\Provider;
13
14
use WBW\Library\Core\Argument\Helper\ArrayHelper;
15
use WBW\Library\Core\Exception\ApiException;
16
use WBW\Library\GeoAPI\Model\Request\Adresse\ReverseCsvRequest;
17
use WBW\Library\GeoAPI\Model\Request\Adresse\ReverseRequest;
18
use WBW\Library\GeoAPI\Model\Request\Adresse\SearchCsvRequest;
19
use WBW\Library\GeoAPI\Model\Request\Adresse\SearchRequest;
20
use WBW\Library\GeoAPI\Model\Response\ReverseCsvResponse;
21
use WBW\Library\GeoAPI\Model\Response\SearchCsvResponse;
22
use WBW\Library\GeoAPI\Serializer\AdresseRequestSerializer;
23
use WBW\Library\GeoAPI\Serializer\AdresseResponseDeserializer;
24
use WBW\Library\GeoJSON\Model\FeatureCollection;
25
26
/**
27
 * Adresse provider.
28
 *
29
 * @author webeweb <https://github.com/webeweb/>
30
 * @package WBW\Library\GeoAPI\Provider
31
 */
32
class AdresseProvider extends AbstractProvider {
33
34
    /**
35
     * Endpoint path.
36
     *
37
     * @var string
38
     */
39
    const ENDPOINT_PATH = "https://api-adresse.data.gouv.fr";
40
41
    /**
42
     * Add an array.
43
     *
44
     * @param array $post The POST.
45
     * @param string $name The name.
46
     * @param array $data The data.
47
     * @return void
48
     */
49
    protected function appendArray(array &$post, $name, array $data) {
50
51
        if (0 === count($data)) {
52
            return;
53
        }
54
55
        foreach ($data as $current) {
56
            $post[] = [
57
                "name"     => $name,
58
                "contents" => $current,
59
            ];
60
        }
61
    }
62
63
    /**
64
     * {@inheritDoc}
65
     */
66
    public function getEndpointPath() {
67
        return self::ENDPOINT_PATH;
68
    }
69
70
    /**
71
     * Reverse.
72
     *
73
     * @param ReverseRequest $request The reverse request.
74
     * @return FeatureCollection|null Returns the reverse response in case of success, null otherwise.
75
     * @throws ApiException Throws an API exception if an error occurs.
76
     */
77
    public function reverse(ReverseRequest $request) {
78
79
        $queryData = AdresseRequestSerializer::serializeReverseRequest($request);
80
81
        $rawResponse = $this->callApi($request, $queryData);
82
83
        return AdresseResponseDeserializer::deserializeReverseResponse($rawResponse);
84
    }
85
86
    /**
87
     * Reverse CSV.
88
     *
89
     * @param ReverseCsvRequest $request The reverse CSV request.
90
     * @return ReverseCsvResponse Returns the reverse CSV response.
91
     * @throws ApiException Throws an API exception if an error occurs.
92
     */
93
    public function reverseCsv(ReverseCsvRequest $request) {
94
95
        $queryData = AdresseRequestSerializer::serializeReverseCsvRequest($request);
96
97
        $filename = realpath($queryData["data"]);
98
        $postData = [
99
            [
100
                "name"     => "data",
101
                "contents" => fopen($filename, "r"),
102
                "filename" => basename($filename),
103
            ],
104
        ];
105
106
        $rawResponse = $this->callApi($request, [], $postData);
107
108
        return AdresseResponseDeserializer::deserializeReverseCsvResponse($rawResponse);
109
    }
110
111
    /**
112
     * Search.
113
     *
114
     * @param SearchRequest $request The search request.
115
     * @return FeatureCollection|null Returns the search response in case of success, null otherwise.
116
     * @throws ApiException Throws an API exception if an error occurs.
117
     */
118
    public function search(SearchRequest $request) {
119
120
        $queryData = AdresseRequestSerializer::serializeSearchRequest($request);
121
122
        $rawResponse = $this->callApi($request, $queryData);
123
124
        return AdresseResponseDeserializer::deserializeSearchResponse($rawResponse);
125
    }
126
127
    /**
128
     * Search CSV.
129
     *
130
     * @param SearchCsvRequest $request The search CSV request.
131
     * @return SearchCsvResponse Returns the search CSV response.
132
     * @throws ApiException Throws an API exception if an error occurs.
133
     */
134
    public function searchCsv(SearchCsvRequest $request) {
135
136
        $queryData = AdresseRequestSerializer::serializeSearchCsvRequest($request);
137
138
        $filename = realpath($queryData["data"]);
139
        $postData = [
140
            [
141
                "name"     => "data",
142
                "contents" => fopen($filename, "r"),
143
                "filename" => basename($filename),
144
            ],
145
        ];
146
        $this->appendArray($postData, "columns", ArrayHelper::get($queryData, "columns", []));
147
        $this->appendArray($postData, "result_columns", ArrayHelper::get($queryData, "result_columns", []));
148
149
        $rawResponse = $this->callApi($request, [], $postData);
150
151
        return AdresseResponseDeserializer::deserializeSearchCsvResponse($rawResponse);
152
    }
153
}