1
+ <?php
2
+
3
+ namespace Olsgreen \AutoTrader \Api ;
4
+
5
+ use Olsgreen \AutoTrader \Api \Builders \TaxonomyFacetRequestBuilder ;
6
+
7
+ /**
8
+ * @see https://developers.autotrader.co.uk/api#taxonomy-facets
9
+ *
10
+ * ALL methods must provide a request parameter including one of:
11
+ *
12
+ * vehicleType, makeId, modelId, generationId
13
+ */
14
+ class TaxonomyFacets extends AbstractApi
15
+ {
16
+ /**
17
+ * Retrieve available fuel types for a given set of parameters.
18
+ *
19
+ * @param string $advertiserId
20
+ * @param array|TaxonomyFacetRequestBuilder $request
21
+ * @return array
22
+ */
23
+ public function fuelTypes (string $ advertiserId , $ request ): array
24
+ {
25
+ return $ this ->facet ('fuelTypes ' , $ advertiserId , $ request );
26
+ }
27
+
28
+ /**
29
+ * Retrieve available transmission types for a given set of parameters.
30
+ *
31
+ * @param string $advertiserId
32
+ * @param array|TaxonomyFacetRequestBuilder $request
33
+ * @return array
34
+ */
35
+ public function transmissionTypes (string $ advertiserId , $ request ): array
36
+ {
37
+ return $ this ->facet ('transmissionTypes ' , $ advertiserId , $ request );
38
+ }
39
+
40
+
41
+ /**
42
+ * Retrieve available body types for a given set of parameters.
43
+ *
44
+ * @param string $advertiserId
45
+ * @param array|TaxonomyFacetRequestBuilder $request
46
+ * @return array
47
+ */
48
+ public function bodyTypes (string $ advertiserId , $ request ): array
49
+ {
50
+ return $ this ->facet ('bodyTypes ' , $ advertiserId , $ request );
51
+ }
52
+
53
+ /**
54
+ * Retrieve available trims for a given set of parameters.
55
+ *
56
+ * @param string $advertiserId
57
+ * @param array|TaxonomyFacetRequestBuilder $request
58
+ * @return array
59
+ */
60
+ public function trims (string $ advertiserId , $ request ): array
61
+ {
62
+ return $ this ->facet ('trims ' , $ advertiserId , $ request );
63
+ }
64
+
65
+ /**
66
+ * Retrieve available doors for a given set of parameters.
67
+ *
68
+ * @param string $advertiserId
69
+ * @param array|TaxonomyFacetRequestBuilder $request
70
+ * @return array
71
+ */
72
+ public function doors (string $ advertiserId , $ request ): array
73
+ {
74
+ return $ this ->facet ('doors ' , $ advertiserId , $ request );
75
+ }
76
+
77
+ /**
78
+ * Retrieve available drivetrains for a given set of parameters.
79
+ *
80
+ * @param string $advertiserId
81
+ * @param array|TaxonomyFacetRequestBuilder $request
82
+ * @return array
83
+ */
84
+ public function drivetrains (string $ advertiserId , $ request ): array
85
+ {
86
+ return $ this ->facet ('drivetrains ' , $ advertiserId , $ request );
87
+ }
88
+
89
+ /**
90
+ * Retrieve available body types for a given set of parameters.
91
+ *
92
+ * @param string $advertiserId
93
+ * @param array|TaxonomyFacetRequestBuilder $request
94
+ * @return array
95
+ */
96
+ public function wheelbaseTypes (string $ advertiserId , $ request ): array
97
+ {
98
+ return $ this ->facet ('wheelbaseTypes ' , $ advertiserId , $ request );
99
+ }
100
+
101
+ /**
102
+ * Retrieve available cab types for a given set of parameters.
103
+ *
104
+ * @param string $advertiserId
105
+ * @param array|TaxonomyFacetRequestBuilder $request
106
+ * @return array
107
+ */
108
+ public function cabTypes (string $ advertiserId , $ request ): array
109
+ {
110
+ return $ this ->facet ('cabTypes ' , $ advertiserId , $ request );
111
+ }
112
+
113
+ /**
114
+ * Retrieve available axle configurations for a given set of parameters.
115
+ *
116
+ * @param string $advertiserId
117
+ * @param array|TaxonomyFacetRequestBuilder $request
118
+ * @return array
119
+ */
120
+ public function axleConfigurations (string $ advertiserId , $ request ): array
121
+ {
122
+ return $ this ->facet ('axleConfigurations ' , $ advertiserId , $ request );
123
+ }
124
+
125
+ /**
126
+ * Retrieve available badge engine sizes for a given set of parameters.
127
+ *
128
+ * @param string $advertiserId
129
+ * @param array|TaxonomyFacetRequestBuilder $request
130
+ * @return array
131
+ */
132
+ public function badgeEngineSizes (string $ advertiserId , $ request ): array
133
+ {
134
+ return $ this ->facet ('badgeEngineSizes ' , $ advertiserId , $ request );
135
+ }
136
+
137
+ /**
138
+ * Retrieve available styles for a given set of parameters.
139
+ *
140
+ * @param string $advertiserId
141
+ * @param array|TaxonomyFacetRequestBuilder $request
142
+ * @return array
143
+ */
144
+ public function styles (string $ advertiserId , $ request ): array
145
+ {
146
+ return $ this ->facet ('styles ' , $ advertiserId , $ request );
147
+ }
148
+
149
+ /**
150
+ * Retrieve available sub styles for a given set of parameters.
151
+ *
152
+ * @param string $advertiserId
153
+ * @param array|TaxonomyFacetRequestBuilder $request
154
+ * @return array
155
+ */
156
+ public function subStyles (string $ advertiserId , $ request ): array
157
+ {
158
+ return $ this ->facet ('subStyles ' , $ advertiserId , $ request );
159
+ }
160
+
161
+ /**
162
+ * Retrieve available end layouts for a given set of parameters.
163
+ *
164
+ * @param string $advertiserId
165
+ * @param array|TaxonomyFacetRequestBuilder $request
166
+ * @return array
167
+ */
168
+ public function endLayouts (string $ advertiserId , $ request ): array
169
+ {
170
+ return $ this ->facet ('endLayouts ' , $ advertiserId , $ request );
171
+ }
172
+
173
+ /**
174
+ * Retrieve available bedroom layouts for a given set of parameters.
175
+ *
176
+ * @param string $advertiserId
177
+ * @param array|TaxonomyFacetRequestBuilder $request
178
+ * @return array
179
+ */
180
+ public function bedroomLayouts (string $ advertiserId , $ request ): array
181
+ {
182
+ return $ this ->facet ('bedroomLayouts ' , $ advertiserId , $ request );
183
+ }
184
+
185
+ /**
186
+ * Retrieve available facet items for a given set of parameters.
187
+ *
188
+ * @param string $name
189
+ * @param string $advertiserId
190
+ * @param array|TaxonomyFacetRequestBuilder $request
191
+ * @return array
192
+ */
193
+ public function facet (string $ name , string $ advertiserId , $ request ) : array
194
+ {
195
+ $ availableFacets = [
196
+ 'fuelTypes ' ,
197
+ 'transmissionTypes ' ,
198
+ 'bodyTypes ' ,
199
+ 'trims ' ,
200
+ 'doors ' ,
201
+ 'drivetrains ' ,
202
+ 'wheelbaseTypes ' ,
203
+ 'cabTypes ' ,
204
+ 'axleConfigurations ' ,
205
+ 'badgeEngineSizes ' ,
206
+ 'styles ' ,
207
+ 'subStyles ' ,
208
+ 'endLayouts ' ,
209
+ 'bedroomLayouts ' ,
210
+ ];
211
+
212
+ if (!in_array ($ name , $ availableFacets )) {
213
+ throw new \InvalidArgumentException (
214
+ 'The $name argument must be one of ' . implode (', ' , $ availableFacets )
215
+ );
216
+ }
217
+
218
+ if (!($ request instanceof TaxonomyFacetRequestBuilder)) {
219
+ if (is_array ($ request )) {
220
+ $ request = TaxonomyFacetRequestBuilder::create ($ request );
221
+ }
222
+
223
+ // Throw an invalid argument exception if it's anything else.
224
+ else {
225
+ throw new \InvalidArgumentException (
226
+ 'The $request argument must be an array or TaxonomyFacetRequestBuilder. '
227
+ );
228
+ }
229
+ }
230
+
231
+ $ options = array_merge ($ request ->toArray (), ['advertiserId ' => $ advertiserId ]);
232
+
233
+ return $ this ->_get ('/taxonomy/ ' . $ name , $ options );
234
+ }
235
+ }
0 commit comments