Fix on Filters

* added filter to get events endpoints

Change-Id: If5ea9738540b6e7083770fd7a209f70ace0740a1
This commit is contained in:
Sebastian Marcet 2016-09-09 19:12:54 -03:00
parent 42a7e3607c
commit dbda548174
10 changed files with 152 additions and 22 deletions

View File

@ -29,6 +29,7 @@ use services\model\ISummitService;
use utils\Filter;
use utils\FilterParser;
use utils\FilterParserException;
use utils\OrderParser;
use utils\PagingInfo;
use utils\PagingResponse;
@ -162,6 +163,7 @@ final class OAuth2SummitLocationsApiController extends OAuth2ProtectedController
}
$filter = null;
if (Input::has('filter')) {
$filter = FilterParser::parse(Input::get('filter'), array
(
@ -176,6 +178,20 @@ final class OAuth2SummitLocationsApiController extends OAuth2ProtectedController
));
}
$order = null;
if (Input::has('order'))
{
$order = OrderParser::parse(Input::get('order'), array
(
'title',
'start_date',
'end_date',
'id',
'created',
));
}
if(is_null($filter)) $filter = new Filter();
$filter->addFilterCondition(FilterParser::buildFilter('location_id','==', $location_id));
@ -185,7 +201,7 @@ final class OAuth2SummitLocationsApiController extends OAuth2ProtectedController
$filter->addFilterCondition(FilterParser::buildFilter('published','==', 1));
}
return $this->event_repository->getAllByPage(new PagingInfo($page, $per_page), $filter);
return $this->event_repository->getAllByPage(new PagingInfo($page, $per_page), $filter, $order);
}
/**

View File

@ -20,6 +20,7 @@ use models\summit\ISummitRepository;
use models\summit\Summit;
use utils\Filter;
use utils\FilterParser;
use utils\Order;
use utils\PagingInfo;
use utils\PagingResponse;
@ -97,11 +98,12 @@ class RetrieveAllSummitEventsBySummitStrategy extends RetrieveSummitEventsStrate
/**
* @param PagingInfo $paging_info
* @param Filter|null $filter
* @param Order|null $order
* @return PagingResponse
*/
public function retrieveEventsFromSource(PagingInfo $paging_info, Filter $filter = null)
public function retrieveEventsFromSource(PagingInfo $paging_info, Filter $filter = null, Order $order = null)
{
return $this->events_repository->getAllByPage($paging_info, $filter);
return $this->events_repository->getAllByPage($paging_info, $filter, $order);
}
}

View File

@ -16,6 +16,7 @@ namespace App\Http\Controllers;
use models\summit\ISummitEventRepository;
use utils\Filter;
use utils\Order;
use utils\PagingInfo;
use utils\PagingResponse;
@ -42,11 +43,12 @@ class RetrieveAllSummitEventsStrategy extends RetrieveSummitEventsStrategy
/**
* @param PagingInfo $paging_info
* @param Filter|null $filter
* @param Order|null $order
* @return PagingResponse
*/
public function retrieveEventsFromSource(PagingInfo $paging_info, Filter $filter = null)
public function retrieveEventsFromSource(PagingInfo $paging_info, Filter $filter = null, Order $order = null)
{
return $this->event_repository->getAllByPage($paging_info, $filter);
return $this->event_repository->getAllByPage($paging_info, $filter, $order);
}
/**

View File

@ -40,6 +40,4 @@ final class RetrievePublishedSummitEventsBySummitStrategy extends RetrieveAllSum
$filter->addFilterCondition(FilterParser::buildFilter('published','==','1'));
return $filter;
}
}

View File

@ -13,6 +13,8 @@
**/
use models\exceptions\ValidationException;
use utils\Filter;
use utils\Order;
use utils\OrderParser;
use utils\PagingResponse;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Input;
@ -59,7 +61,7 @@ abstract class RetrieveSummitEventsStrategy
return $this->retrieveEventsFromSource
(
new PagingInfo($page, $per_page), $this->buildFilter()
new PagingInfo($page, $per_page), $this->buildFilter(), $this->buildOrder()
);
}
@ -73,12 +75,32 @@ abstract class RetrieveSummitEventsStrategy
}
return $filter;
}
/**
* @return null|Order
*/
protected function buildOrder(){
$order = null;
if (Input::has('order'))
{
$order = OrderParser::parse(Input::get('order'), array
(
'title',
'start_date',
'end_date',
'id',
'created',
));
}
return $order;
}
/**
* @param PagingInfo $paging_info
* @param Filter|null $filter
* @param Order|null $order
* @return PagingResponse
*/
abstract public function retrieveEventsFromSource(PagingInfo $paging_info, Filter $filter = null);
abstract public function retrieveEventsFromSource(PagingInfo $paging_info, Filter $filter = null, Order $order = null);
/**
* @return array

View File

@ -153,7 +153,7 @@ abstract class PresentationMaterial extends SilverstripeBaseModel
protected $display_on_site;
/**
* @ORM\Column(name="Order", type="integer")
* @ORM\Column(name="`Order`", type="integer")
* @var int
*/
protected $order;

View File

@ -293,7 +293,6 @@ class SummitEvent extends SilverstripeBaseModel
*/
protected $head_count;
/**
* @return bool
*/

View File

@ -14,6 +14,7 @@
use models\utils\IBaseRepository;
use utils\Filter;
use utils\Order;
use utils\PagingInfo;
use utils\PagingResponse;
@ -31,10 +32,11 @@ interface ISummitEventRepository extends IBaseRepository
/**
* @param PagingInfo $paging_info
* @param Filter $filter
* @param Filter|null $filter
* @param Order|null $order
* @return PagingResponse
*/
public function getAllByPage(PagingInfo $paging_info, Filter $filter);
public function getAllByPage(PagingInfo $paging_info, Filter $filter = null, Order $order = null);
/**
* @param int $event_id

View File

@ -19,6 +19,7 @@ use models\summit\SummitEvent;
use repositories\SilverStripeDoctrineRepository;
use utils\DoctrineJoinFilterMapping;
use utils\Filter;
use utils\Order;
use utils\PagingInfo;
use utils\PagingResponse;
use Doctrine\ORM\Query\Expr\Join;
@ -55,10 +56,11 @@ final class DoctrineSummitEventRepository extends SilverStripeDoctrineRepository
/**
* @param PagingInfo $paging_info
* @param Filter $filter
* @param Filter|null $filter
* @param Order|null $order
* @return PagingResponse
*/
public function getAllByPage(PagingInfo $paging_info, Filter $filter)
public function getAllByPage(PagingInfo $paging_info, Filter $filter = null, Order $order = null)
{
$class = count($filter->getFilter('speaker')) > 0? \models\summit\Presentation::class : \models\summit\SummitEvent::class;
$query = $this->getEntityManager()->createQueryBuilder()
@ -69,7 +71,7 @@ final class DoctrineSummitEventRepository extends SilverStripeDoctrineRepository
$filter->apply2Query($query, array
(
'title' => 'e.title',
'title' => 'e.title:json_string',
'published' => 'e.published',
'start_date' => 'e.start_date:datetime_epoch',
'end_date' => 'e.end_date:datetime_epoch',
@ -118,9 +120,23 @@ final class DoctrineSummitEventRepository extends SilverStripeDoctrineRepository
));
}
if (!is_null($order)) {
$order->apply2Query($query, array
(
'title' => 'e.title',
'id' => 'e.id',
'start_date' => 'e.start_date',
'end_date' => 'e.end_date',
'created' => 'e.created',
));
} else {
//default order
$query = $query->addOrderBy("e.start_date",'ASC');
$query = $query->addOrderBy("e.end_date", 'ASC');
}
$query= $query
->addOrderBy("e.start_date",'ASC')
->addOrderBy("e.end_date", 'ASC')
->setFirstResult($paging_info->getOffset())
->setMaxResults($paging_info->getPerPage());

View File

@ -1660,8 +1660,8 @@ final class OAuth2SummitApiTest extends ProtectedApiTest
{
$params = array
(
'id' => 6,
'presentation_id' => 6838
'id' => 7,
'presentation_id' => 15404
);
$headers = array
@ -1672,8 +1672,10 @@ final class OAuth2SummitApiTest extends ProtectedApiTest
$video_data = array
(
'you_tube_id' => 'nrGk0AuFd_9',
'name' => 'Fostering Full Equality, Organized by the Women of OpenStack!',
'you_tube_id' => 'cpHa7kSOur0',
'name' => 'test video',
'description' => 'test video',
'display_on_site' => true,
);
$response = $this->action
@ -1755,4 +1757,75 @@ final class OAuth2SummitApiTest extends ProtectedApiTest
$this->assertTrue(!is_null($notifications));
}
public function testGetAllScheduledEvents(){
$params = array
(
'id' => 7,
'page' => 1,
'per_page' => 10,
'filter' => array
(
'title=@Lightning',
),
);
$headers = array
(
"HTTP_Authorization" => " Bearer " .$this->access_token,
"CONTENT_TYPE" => "application/json"
);
$response = $this->action
(
"GET",
"OAuth2SummitEventsApiController@getScheduledEvents",
$params,
array(),
array(),
array(),
$headers
);
$content = $response->getContent();
$this->assertResponseStatus(200);
$events = json_decode($content);
$this->assertTrue(!is_null($events));
}
public function testGetAllScheduledEventsUsingOrder(){
$params = array
(
'id' => 7,
'page' => 1,
'per_page' => 5,
'filter' => '',
'order' => '+title'
);
$headers = array
(
"HTTP_Authorization" => " Bearer " .$this->access_token,
"CONTENT_TYPE" => "application/json"
);
$response = $this->action
(
"GET",
"OAuth2SummitEventsApiController@getScheduledEvents",
$params,
array(),
array(),
array(),
$headers
);
$content = $response->getContent();
$this->assertResponseStatus(200);
$events = json_decode($content);
$this->assertTrue(!is_null($events));
}
}