Skip to content

Commit 61477ce

Browse files
committed
feat: add new filters to GET api/v1/summits/{id}/locations/venues
* rooms_name * rooms_floor_name * floors_name
1 parent 4555683 commit 61477ce

File tree

2 files changed

+77
-27
lines changed

2 files changed

+77
-27
lines changed

app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitLocationsApiController.php

Lines changed: 62 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -214,33 +214,71 @@ function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($summit) {
214214
*/
215215
public function getVenues($summit_id)
216216
{
217-
return $this->processRequest(function () use ($summit_id) {
218217

219-
$summit = SummitFinderStrategyFactory::build($this->repository, $this->resource_server_context)->find($summit_id);
220-
if (is_null($summit)) return $this->error404();
221-
222-
//locations
223-
$locations = [];
218+
$summit = SummitFinderStrategyFactory::build($this->repository, $this->resource_server_context)->find($summit_id);
219+
if (is_null($summit)) return $this->error404();
224220

225-
foreach ($summit->getVenues() as $location) {
226-
$locations[] = SerializerRegistry::getInstance()->getSerializer($location)->serialize();
221+
return $this->_getAll(
222+
function () {
223+
return [
224+
'name' => ['==', '=@','@@'],
225+
'rooms_name' => ['==', '=@','@@'],
226+
'rooms_floor_name' =>['==', '=@','@@'],
227+
'floors_name' => ['==', '=@','@@'],
228+
'description' => ['=@','@@'],
229+
'address_1' => ['=@'],
230+
'address_2' => ['=@'],
231+
'zip_code' => ['==', '=@'],
232+
'city' => ['==', '=@'],
233+
'state' => ['==', '=@'],
234+
'country' => ['==', '=@'],
235+
'sold_out' => ['=='],
236+
'is_main' => ['=='],
237+
];
238+
},
239+
function () {
240+
return [
241+
'name' => 'sometimes|string',
242+
'rooms_name' => 'sometimes|string',
243+
'rooms_floor_name' => 'sometimes|string',
244+
'floors_name' => 'sometimes|string',
245+
'description' => 'sometimes|string',
246+
'address_1' => 'sometimes|string',
247+
'address_2' => 'sometimes|string',
248+
'zip_code' => 'sometimes|string',
249+
'city' => 'sometimes|string',
250+
'state' => 'sometimes|string',
251+
'country' => 'sometimes|string',
252+
'sold_out' => 'sometimes|boolean',
253+
'is_main' => 'sometimes|boolean',
254+
];
255+
},
256+
function () {
257+
return [
258+
'id',
259+
'name',
260+
'order'
261+
];
262+
},
263+
function ($filter) {
264+
$filter->addFilterCondition(FilterParser::buildFilter('class_name', '==', SummitVenue::ClassName));
265+
return $filter;
266+
},
267+
function () {
268+
return SerializerRegistry::SerializerType_Public;
269+
},
270+
null,
271+
null,
272+
function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($summit) {
273+
return $this->location_repository->getBySummit
274+
(
275+
$summit,
276+
new PagingInfo($page, $per_page),
277+
call_user_func($applyExtraFilters, $filter),
278+
$order
279+
);
227280
}
228-
229-
$response = new PagingResponse
230-
(
231-
count($locations),
232-
count($locations),
233-
1,
234-
1,
235-
$locations
236-
);
237-
238-
return $this->ok($response->toArray(
239-
SerializerUtils::getExpand(),
240-
SerializerUtils::getFields(),
241-
SerializerUtils::getRelations(),
242-
));
243-
});
281+
);
244282
}
245283

246284
/**

app/Repositories/Summit/DoctrineSummitLocationRepository.php

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
use models\summit\SummitGeoLocatedLocation;
2424
use models\summit\SummitHotel;
2525
use models\summit\SummitVenue;
26-
use utils\DoctrineFilterMapping;
2726
use utils\DoctrineHavingFilterMapping;
2827
use utils\DoctrineInstanceOfFilterMapping;
2928
use utils\Filter;
@@ -56,7 +55,10 @@ protected function getBaseEntity()
5655
protected function getFilterMappings()
5756
{
5857
return [
59-
'name' => 'al.name:json_string',
58+
'name' => 'al.name:json_string',
59+
'rooms_name' => 'v_rooms.name:json_string',
60+
'rooms_floor_name' => 'v_rooms_floor.name:json_string',
61+
'floors_name' => 'v_floors.name:json_string',
6062
'description' => 'al.description:json_string',
6163
'opening_hour' => 'al.opening_hour:json_int',
6264
'closing_hour' => 'al.closing_hour:json_int',
@@ -126,7 +128,7 @@ public function getBySummit
126128
->from(SummitAbstractLocation::class, "al")
127129
->leftJoin(SummitGeoLocatedLocation::class, 'gll', 'WITH', 'gll.id = al.id')
128130
->leftJoin(SummitVenue::class, 'v', 'WITH', 'v.id = gll.id')
129-
->leftJoin(SummitExternalLocation::class, 'el', 'WITH', 'el.id = gll.id')
131+
->leftJoin(SummitVenueRoom::class, 'vr', 'WITH', 'v.id = gll.id')
130132
->leftJoin(SummitHotel::class, 'h', 'WITH', 'h.id = el.id')
131133
->leftJoin(SummitAirport::class, 'ap', 'WITH', 'ap.id = el.id')
132134
->leftJoin(SummitVenueRoom::class, 'r', 'WITH', 'r.id = al.id')
@@ -158,6 +160,16 @@ public function getBySummit
158160
$query = $query->addOrderBy("al.id",'ASC');
159161
}
160162

163+
if($filter->hasFilter("rooms_name") || $filter->hasFilter("rooms_floor_name")){
164+
$query = $query->leftJoin('v.rooms', 'v_rooms');
165+
if($filter->hasFilter("rooms_floor_name")){
166+
$query = $query->leftJoin('v_rooms.floor', 'v_rooms_floor');
167+
}
168+
}
169+
if($filter->hasFilter("floors_name")){
170+
$query = $query->leftJoin('v.floors', 'v_floors');
171+
}
172+
161173
if($filter->hasFilter("availability_day")){
162174
// special case, we need to figure if each room has available slots
163175
$res = $query->getQuery()->execute();

0 commit comments

Comments
 (0)