Added relations parameter to get summits endpoint

now user could query summit entities without relations
( only main data )

Change-Id: Id5ad77ac62c3f87a2bde939e6639cffac1283665
This commit is contained in:
Sebastian Marcet 2017-12-07 17:20:46 -03:00
parent 86375bd3da
commit dd78b729b6
3 changed files with 40 additions and 16 deletions

View File

@ -79,10 +79,17 @@ final class OAuth2SummitApiController extends OAuth2ProtectedController
{ {
try { try {
$expand = Request::input('expand', '');
$fields = Request::input('fields', '');
$relations = Request::input('relations', '');
$relations = !empty($relations) ? explode(',', $relations) : [];
$fields = !empty($fields) ? explode(',', $fields) : [];
$summits = []; $summits = [];
foreach($this->_getSummits() as $summit){ foreach($this->_getSummits() as $summit){
$summits[] = SerializerRegistry::getInstance()->getSerializer($summit)->serialize(Input::get('expand','')); $summits[] = SerializerRegistry::getInstance()->getSerializer($summit)->serialize($expand, $fields, $relations);
} }
$response = new PagingResponse $response = new PagingResponse

View File

@ -27,8 +27,6 @@ final class SummitSerializer extends SilverStripeSerializer
'Name' => 'name:json_string', 'Name' => 'name:json_string',
'BeginDate' => 'start_date:datetime_epoch', 'BeginDate' => 'start_date:datetime_epoch',
'EndDate' => 'end_date:datetime_epoch', 'EndDate' => 'end_date:datetime_epoch',
'BeginDate' => 'start_date:datetime_epoch',
'EndDate' => 'end_date:datetime_epoch',
'SubmissionBeginDate' => 'submission_begin_date:datetime_epoch', 'SubmissionBeginDate' => 'submission_begin_date:datetime_epoch',
'SubmissionEndDate' => 'submission_end_date:datetime_epoch', 'SubmissionEndDate' => 'submission_end_date:datetime_epoch',
'VotingBeginDate' => 'voting_begin_date:datetime_epoch', 'VotingBeginDate' => 'voting_begin_date:datetime_epoch',
@ -56,6 +54,13 @@ final class SummitSerializer extends SilverStripeSerializer
'SpeakerAnnouncementEmailAlternateRejectedCount' => 'speaker_announcement_email_alternate_rejected_count:json_int', 'SpeakerAnnouncementEmailAlternateRejectedCount' => 'speaker_announcement_email_alternate_rejected_count:json_int',
]; ];
protected static $allowed_relations = [
'ticket_types',
'locations',
'wifi_connections',
];
/** /**
* @param null $expand * @param null $expand
* @param array $fields * @param array $fields
@ -70,6 +75,7 @@ final class SummitSerializer extends SilverStripeSerializer
$values = parent::serialize($expand, $fields, $relations, $params); $values = parent::serialize($expand, $fields, $relations, $params);
$time_zone_list = timezone_identifiers_list(); $time_zone_list = timezone_identifiers_list();
$time_zone_id = $summit->getTimeZoneId(); $time_zone_id = $summit->getTimeZoneId();
if(!count($relations)) $relations = $this->getAllowedRelations();
$values['time_zone'] = null; $values['time_zone'] = null;
if (!empty($time_zone_id) && isset($time_zone_list[$time_zone_id])) { if (!empty($time_zone_id) && isset($time_zone_list[$time_zone_id])) {
@ -95,25 +101,31 @@ final class SummitSerializer extends SilverStripeSerializer
$values['schedule_event_detail_url'] = sprintf("%ssummit/%s/%s/%s", Config::get("server.assets_base_url", 'https://www.openstack.org/'), $main_page, $schedule_page, 'events/:event_id/:event_title'); $values['schedule_event_detail_url'] = sprintf("%ssummit/%s/%s/%s", Config::get("server.assets_base_url", 'https://www.openstack.org/'), $main_page, $schedule_page, 'events/:event_id/:event_title');
// tickets // tickets
$ticket_types = []; if(in_array('ticket_types', $relations)) {
foreach ($summit->getTicketTypes() as $ticket) { $ticket_types = [];
$ticket_types[] = SerializerRegistry::getInstance()->getSerializer($ticket)->serialize($expand); foreach ($summit->getTicketTypes() as $ticket) {
$ticket_types[] = SerializerRegistry::getInstance()->getSerializer($ticket)->serialize($expand);
}
$values['ticket_types'] = $ticket_types;
} }
$values['ticket_types'] = $ticket_types;
//locations //locations
$locations = []; if(in_array('locations', $relations)) {
foreach ($summit->getLocations() as $location) { $locations = [];
$locations[] = SerializerRegistry::getInstance()->getSerializer($location)->serialize($expand); foreach ($summit->getLocations() as $location) {
$locations[] = SerializerRegistry::getInstance()->getSerializer($location)->serialize($expand);
}
$values['locations'] = $locations;
} }
$values['locations'] = $locations;
// wifi connections // wifi connections
$wifi_connections = []; if(in_array('wifi_connections', $relations)) {
foreach ($summit->getWifiConnections() as $wifi_connection) { $wifi_connections = [];
$wifi_connections[] = SerializerRegistry::getInstance()->getSerializer($wifi_connection)->serialize($expand); foreach ($summit->getWifiConnections() as $wifi_connection) {
$wifi_connections[] = SerializerRegistry::getInstance()->getSerializer($wifi_connection)->serialize($expand);
}
$values['wifi_connections'] = $wifi_connections;
} }
$values['wifi_connections'] = $wifi_connections;
if (!empty($expand)) { if (!empty($expand)) {
$expand = explode(',', $expand); $expand = explode(',', $expand);
@ -229,6 +241,7 @@ final class SummitSerializer extends SilverStripeSerializer
} }
} }
} }
$values['timestamp'] = time(); $values['timestamp'] = time();
return $values; return $values;
} }

View File

@ -18,7 +18,8 @@ final class OAuth2SummitApiTest extends ProtectedApiTest
public function testGetSummits() public function testGetSummits()
{ {
$params = ['expand' => 'type']; $start = time();
$params = ['relations'=>'none'];
$headers = array("HTTP_Authorization" => " Bearer " . $this->access_token); $headers = array("HTTP_Authorization" => " Bearer " . $this->access_token);
$response = $this->action( $response = $this->action(
@ -33,6 +34,9 @@ final class OAuth2SummitApiTest extends ProtectedApiTest
$content = $response->getContent(); $content = $response->getContent();
$summits = json_decode($content); $summits = json_decode($content);
$end = time();
$delta = $end - $start;
echo "execution call " . $delta . " seconds ...";
$this->assertTrue(!is_null($summits)); $this->assertTrue(!is_null($summits));
$this->assertResponseStatus(200); $this->assertResponseStatus(200);
} }