Skip to content

Commit

Permalink
feat: add new filters to GET api/v1/summits/{id}/locations/venues
Browse files Browse the repository at this point in the history
* rooms_name
* rooms_floor_name
* floors_name
  • Loading branch information
smarcet committed Jan 30, 2025
1 parent 4555683 commit 61477ce
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -214,33 +214,71 @@ function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($summit) {
*/
public function getVenues($summit_id)
{
return $this->processRequest(function () use ($summit_id) {

$summit = SummitFinderStrategyFactory::build($this->repository, $this->resource_server_context)->find($summit_id);
if (is_null($summit)) return $this->error404();

//locations
$locations = [];
$summit = SummitFinderStrategyFactory::build($this->repository, $this->resource_server_context)->find($summit_id);
if (is_null($summit)) return $this->error404();

foreach ($summit->getVenues() as $location) {
$locations[] = SerializerRegistry::getInstance()->getSerializer($location)->serialize();
return $this->_getAll(
function () {
return [
'name' => ['==', '=@','@@'],
'rooms_name' => ['==', '=@','@@'],
'rooms_floor_name' =>['==', '=@','@@'],
'floors_name' => ['==', '=@','@@'],
'description' => ['=@','@@'],
'address_1' => ['=@'],
'address_2' => ['=@'],
'zip_code' => ['==', '=@'],
'city' => ['==', '=@'],
'state' => ['==', '=@'],
'country' => ['==', '=@'],
'sold_out' => ['=='],
'is_main' => ['=='],
];
},
function () {
return [
'name' => 'sometimes|string',
'rooms_name' => 'sometimes|string',
'rooms_floor_name' => 'sometimes|string',
'floors_name' => 'sometimes|string',
'description' => 'sometimes|string',
'address_1' => 'sometimes|string',
'address_2' => 'sometimes|string',
'zip_code' => 'sometimes|string',
'city' => 'sometimes|string',
'state' => 'sometimes|string',
'country' => 'sometimes|string',
'sold_out' => 'sometimes|boolean',
'is_main' => 'sometimes|boolean',
];
},
function () {
return [
'id',
'name',
'order'
];
},
function ($filter) {
$filter->addFilterCondition(FilterParser::buildFilter('class_name', '==', SummitVenue::ClassName));
return $filter;
},
function () {
return SerializerRegistry::SerializerType_Public;
},
null,
null,
function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($summit) {
return $this->location_repository->getBySummit
(
$summit,
new PagingInfo($page, $per_page),
call_user_func($applyExtraFilters, $filter),
$order
);
}

$response = new PagingResponse
(
count($locations),
count($locations),
1,
1,
$locations
);

return $this->ok($response->toArray(
SerializerUtils::getExpand(),
SerializerUtils::getFields(),
SerializerUtils::getRelations(),
));
});
);
}

/**
Expand Down
18 changes: 15 additions & 3 deletions app/Repositories/Summit/DoctrineSummitLocationRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
use models\summit\SummitGeoLocatedLocation;
use models\summit\SummitHotel;
use models\summit\SummitVenue;
use utils\DoctrineFilterMapping;
use utils\DoctrineHavingFilterMapping;
use utils\DoctrineInstanceOfFilterMapping;
use utils\Filter;
Expand Down Expand Up @@ -56,7 +55,10 @@ protected function getBaseEntity()
protected function getFilterMappings()
{
return [
'name' => 'al.name:json_string',
'name' => 'al.name:json_string',
'rooms_name' => 'v_rooms.name:json_string',
'rooms_floor_name' => 'v_rooms_floor.name:json_string',
'floors_name' => 'v_floors.name:json_string',
'description' => 'al.description:json_string',
'opening_hour' => 'al.opening_hour:json_int',
'closing_hour' => 'al.closing_hour:json_int',
Expand Down Expand Up @@ -126,7 +128,7 @@ public function getBySummit
->from(SummitAbstractLocation::class, "al")
->leftJoin(SummitGeoLocatedLocation::class, 'gll', 'WITH', 'gll.id = al.id')
->leftJoin(SummitVenue::class, 'v', 'WITH', 'v.id = gll.id')
->leftJoin(SummitExternalLocation::class, 'el', 'WITH', 'el.id = gll.id')
->leftJoin(SummitVenueRoom::class, 'vr', 'WITH', 'v.id = gll.id')
->leftJoin(SummitHotel::class, 'h', 'WITH', 'h.id = el.id')
->leftJoin(SummitAirport::class, 'ap', 'WITH', 'ap.id = el.id')
->leftJoin(SummitVenueRoom::class, 'r', 'WITH', 'r.id = al.id')
Expand Down Expand Up @@ -158,6 +160,16 @@ public function getBySummit
$query = $query->addOrderBy("al.id",'ASC');
}

if($filter->hasFilter("rooms_name") || $filter->hasFilter("rooms_floor_name")){
$query = $query->leftJoin('v.rooms', 'v_rooms');
if($filter->hasFilter("rooms_floor_name")){
$query = $query->leftJoin('v_rooms.floor', 'v_rooms_floor');
}
}
if($filter->hasFilter("floors_name")){
$query = $query->leftJoin('v.floors', 'v_floors');
}

if($filter->hasFilter("availability_day")){
// special case, we need to figure if each room has available slots
$res = $query->getQuery()->execute();
Expand Down

0 comments on commit 61477ce

Please sign in to comment.