diff --git a/app/Http/Controllers/OAuth2CompaniesApiController.php b/app/Http/Controllers/Apis/Protected/Main/OAuth2CompaniesApiController.php similarity index 99% rename from app/Http/Controllers/OAuth2CompaniesApiController.php rename to app/Http/Controllers/Apis/Protected/Main/OAuth2CompaniesApiController.php index 48582376..7fbd885f 100644 --- a/app/Http/Controllers/OAuth2CompaniesApiController.php +++ b/app/Http/Controllers/Apis/Protected/Main/OAuth2CompaniesApiController.php @@ -24,7 +24,6 @@ use models\exceptions\EntityNotFoundException; use models\exceptions\ValidationException; use Illuminate\Support\Facades\Input; use Illuminate\Support\Facades\Validator; - /** * Class OAuth2CompaniesApiController * @package App\Http\Controllers @@ -46,7 +45,7 @@ final class OAuth2CompaniesApiController extends OAuth2ProtectedController $this->repository = $company_repository; } - public function getCompanies(){ + public function getAll(){ $values = Input::all(); diff --git a/app/Http/Controllers/Apis/Protected/Main/OAuth2GroupsApiController.php b/app/Http/Controllers/Apis/Protected/Main/OAuth2GroupsApiController.php new file mode 100644 index 00000000..859c6c67 --- /dev/null +++ b/app/Http/Controllers/Apis/Protected/Main/OAuth2GroupsApiController.php @@ -0,0 +1,134 @@ +repository = $group_repository; + } + + public function getAll(){ + + $values = Input::all(); + + $rules = array + ( + 'page' => 'integer|min:1', + 'per_page' => 'required_with:page|integer|min:5|max:100', + ); + + try { + + $validation = Validator::make($values, $rules); + + if ($validation->fails()) { + $ex = new ValidationException(); + throw $ex->setMessages($validation->messages()->toArray()); + } + + // default values + $page = 1; + $per_page = 5; + + if (Input::has('page')) { + $page = intval(Input::get('page')); + $per_page = intval(Input::get('per_page')); + } + + $filter = null; + + if (Input::has('filter')) { + $filter = FilterParser::parse(Input::get('filter'), array + ( + 'code' => ['=@', '=='], + 'title' => ['=@', '=='], + )); + } + + $order = null; + + if (Input::has('order')) + { + $order = OrderParser::parse(Input::get('order'), array + ( + 'code', + 'title', + 'id', + )); + } + + if(is_null($filter)) $filter = new Filter(); + + $data = $this->repository->getAllByPage(new PagingInfo($page, $per_page), $filter, $order); + $fields = Request::input('fields', ''); + $fields = !empty($fields) ? explode(',', $fields) : []; + $relations = Request::input('relations', ''); + $relations = !empty($relations) ? explode(',', $relations) : []; + + return $this->ok + ( + $data->toArray + ( + Request::input('expand', ''), + $fields, + $relations + ) + ); + } + catch (EntityNotFoundException $ex1) { + Log::warning($ex1); + return $this->error404(); + } + catch (ValidationException $ex2) { + Log::warning($ex2); + return $this->error412($ex2->getMessages()); + } + catch(FilterParserException $ex3){ + Log::warning($ex3); + return $this->error412($ex3->getMessages()); + } + catch (\Exception $ex) { + Log::error($ex); + return $this->error500($ex); + } + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/Apis/Protected/Main/OAuth2MembersApiController.php b/app/Http/Controllers/Apis/Protected/Main/OAuth2MembersApiController.php index 4a35ebc8..49f5e3a2 100644 --- a/app/Http/Controllers/Apis/Protected/Main/OAuth2MembersApiController.php +++ b/app/Http/Controllers/Apis/Protected/Main/OAuth2MembersApiController.php @@ -46,7 +46,7 @@ final class OAuth2MembersApiController extends OAuth2ProtectedController $this->repository = $member_repository; } - public function getMembers(){ + public function getAll(){ $values = Input::all(); diff --git a/app/Http/Controllers/OAuth2TagsApiController.php b/app/Http/Controllers/Apis/Protected/Main/OAuth2TagsApiController.php similarity index 99% rename from app/Http/Controllers/OAuth2TagsApiController.php rename to app/Http/Controllers/Apis/Protected/Main/OAuth2TagsApiController.php index c5418a00..34ba356b 100644 --- a/app/Http/Controllers/OAuth2TagsApiController.php +++ b/app/Http/Controllers/Apis/Protected/Main/OAuth2TagsApiController.php @@ -47,7 +47,7 @@ final class OAuth2TagsApiController extends OAuth2ProtectedController $this->repository = $tag_repository; } - public function getTags(){ + public function getAll(){ $values = Input::all(); diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitSpeakersApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitSpeakersApiController.php index 3914f53a..eccc0a02 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitSpeakersApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitSpeakersApiController.php @@ -156,7 +156,7 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController } - public function getAllSpeakers(){ + public function getAll(){ try { $values = Input::all(); diff --git a/app/Http/routes.php b/app/Http/routes.php index b3452049..7a2e5a49 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -27,7 +27,7 @@ Route::group([ ], function(){ // members Route::group(['prefix'=>'members'], function() { - Route::get('', 'OAuth2MembersApiController@getMembers'); + Route::get('', 'OAuth2MembersApiController@getAll'); }); // summits @@ -84,7 +84,7 @@ Route::group([ // members Route::group(['prefix'=>'members'], function(){ - Route::get('', 'OAuth2MembersApiController@getMembers'); + Route::get('', 'OAuth2MembersApiController@getAll'); Route::group(['prefix'=>'me'], function(){ // get my member info @@ -104,12 +104,17 @@ Route::group([ // tags Route::group(['prefix'=>'tags'], function(){ - Route::get('', 'OAuth2TagsApiController@getTags'); + Route::get('', 'OAuth2TagsApiController@getAll'); }); // companies Route::group(['prefix'=>'companies'], function(){ - Route::get('', 'OAuth2CompaniesApiController@getCompanies'); + Route::get('', 'OAuth2CompaniesApiController@getAll'); + }); + + // groups + Route::group(['prefix'=>'groups'], function(){ + Route::get('', 'OAuth2GroupsApiController@getAll'); }); // teams @@ -300,9 +305,8 @@ Route::group([ }); // speakers - Route::group(array('prefix' => 'speakers'), function () { - Route::get('', 'OAuth2SummitSpeakersApiController@getAllSpeakers'); + Route::get('', 'OAuth2SummitSpeakersApiController@getAll'); }); }); diff --git a/app/Repositories/Main/DoctrineGroupRepository.php b/app/Repositories/Main/DoctrineGroupRepository.php index 1d204221..2e251c1c 100644 --- a/app/Repositories/Main/DoctrineGroupRepository.php +++ b/app/Repositories/Main/DoctrineGroupRepository.php @@ -24,6 +24,28 @@ final class DoctrineGroupRepository implements IGroupRepository { + /** + * @return array + */ + protected function getFilterMappings() + { + return [ + 'code' => 'e.code:json_string', + 'title' => 'e.title:json_string', + ]; + } + + /** + * @return array + */ + protected function getOrderMappings() + { + return [ + 'id' => 'e.id', + 'code' => 'e.code', + 'title' => 'e.title', + ]; + } /** * @return string */ diff --git a/database/seeds/ApiEndpointsSeeder.php b/database/seeds/ApiEndpointsSeeder.php index a8c14406..de7bb8c2 100644 --- a/database/seeds/ApiEndpointsSeeder.php +++ b/database/seeds/ApiEndpointsSeeder.php @@ -33,6 +33,7 @@ class ApiEndpointsSeeder extends Seeder $this->seedTeamEndpoints(); $this->seedTagsEndpoints(); $this->seedCompaniesEndpoints(); + $this->seedGroupsEndpoints(); } /** @@ -512,6 +513,24 @@ class ApiEndpointsSeeder extends Seeder ); } + private function seedGroupsEndpoints(){ + $current_realm = Config::get('app.url'); + + $this->seedApiEndpoints('groups', [ + // members + array( + 'name' => 'get-groups', + 'route' => '/api/v1/groups', + 'http_method' => 'GET', + 'scopes' => [ + sprintf('%s/summits/read', $current_realm), + sprintf('%s/groups/read', $current_realm) + ], + ) + ] + ); + } + private function seedTeamEndpoints(){ $current_realm = Config::get('app.url'); diff --git a/database/seeds/ApiScopesSeeder.php b/database/seeds/ApiScopesSeeder.php index 3c52e7bf..8e5febf8 100644 --- a/database/seeds/ApiScopesSeeder.php +++ b/database/seeds/ApiScopesSeeder.php @@ -34,6 +34,7 @@ final class ApiScopesSeeder extends Seeder $this->seedTeamsScopes(); $this->seedTagsScopes(); $this->seedCompaniesScopes(); + $this->seedGroupsScopes(); } private function seedSummitScopes() @@ -214,6 +215,32 @@ final class ApiScopesSeeder extends Seeder EntityManager::flush(); } + private function seedGroupsScopes(){ + $current_realm = Config::get('app.url'); + $api = EntityManager::getRepository(\App\Models\ResourceServer\Api::class)->findOneBy(['name' => 'groups']); + + $scopes = [ + array( + 'name' => sprintf('%s/groups/read', $current_realm), + 'short_description' => 'Get Groups Data', + 'description' => 'Grants read only access for Groups Data', + ), + ]; + + foreach ($scopes as $scope_info) { + $scope = new ApiScope(); + $scope->setName($scope_info['name']); + $scope->setShortDescription($scope_info['short_description']); + $scope->setDescription($scope_info['description']); + $scope->setActive(true); + $scope->setDefault(false); + $scope->setApi($api); + EntityManager::persist($scope); + } + + EntityManager::flush(); + } + private function seedTeamsScopes(){ $current_realm = Config::get('app.url'); $api = EntityManager::getRepository(\App\Models\ResourceServer\Api::class)->findOneBy(['name' => 'teams']); diff --git a/database/seeds/ApiSeeder.php b/database/seeds/ApiSeeder.php index 6af6fc5c..62e155d8 100644 --- a/database/seeds/ApiSeeder.php +++ b/database/seeds/ApiSeeder.php @@ -64,7 +64,7 @@ final class ApiSeeder extends Seeder EntityManager::flush(); - //tags + //companies $api = new Api(); $api->setName('companies'); @@ -75,6 +75,17 @@ final class ApiSeeder extends Seeder EntityManager::flush(); + //groups + + $api = new Api(); + $api->setName('groups'); + $api->setActive(true); + $api->setDescription('groups API'); + + EntityManager::persist($api); + + EntityManager::flush(); + // teams diff --git a/tests/OAuth2CompaniesApiTest.php b/tests/OAuth2CompaniesApiTest.php index 0b4504ad..36df6b24 100644 --- a/tests/OAuth2CompaniesApiTest.php +++ b/tests/OAuth2CompaniesApiTest.php @@ -27,7 +27,7 @@ class OAuth2CompaniesApiTest extends ProtectedApiTest $headers = array("HTTP_Authorization" => " Bearer " . $this->access_token); $response = $this->action( "GET", - "OAuth2CompaniesApiController@getCompanies", + "OAuth2CompaniesApiController@getAll", $params, array(), array(), diff --git a/tests/OAuth2GroupsApiTest.php b/tests/OAuth2GroupsApiTest.php new file mode 100644 index 00000000..f05f2b43 --- /dev/null +++ b/tests/OAuth2GroupsApiTest.php @@ -0,0 +1,44 @@ + ['code=@adm'], + 'order' => '-id' + ]; + + $headers = array("HTTP_Authorization" => " Bearer " . $this->access_token); + $response = $this->action( + "GET", + "OAuth2GroupsApiController@getAll", + $params, + array(), + array(), + array(), + $headers + ); + + $content = $response->getContent(); + $groups = json_decode($content); + $this->assertTrue(!is_null($groups)); + $this->assertResponseStatus(200); + } + +} \ No newline at end of file diff --git a/tests/OAuth2MembersApiTest.php b/tests/OAuth2MembersApiTest.php index cd8244e7..b39292cc 100644 --- a/tests/OAuth2MembersApiTest.php +++ b/tests/OAuth2MembersApiTest.php @@ -27,7 +27,7 @@ final class OAuth2MembersApiTest extends ProtectedApiTest $headers = array("HTTP_Authorization" => " Bearer " . $this->access_token); $response = $this->action( "GET", - "OAuth2MembersApiController@getMembers", + "OAuth2MembersApiController@getAll", $params, array(), array(), @@ -52,7 +52,7 @@ final class OAuth2MembersApiTest extends ProtectedApiTest $headers = array("HTTP_Authorization" => " Bearer " . $this->access_token); $response = $this->action( "GET", - "OAuth2MembersApiController@getMembers", + "OAuth2MembersApiController@getAll", $params, array(), array(), @@ -75,7 +75,7 @@ final class OAuth2MembersApiTest extends ProtectedApiTest $headers = array("HTTP_Authorization" => " Bearer " . $this->access_token); $response = $this->action( "GET", - "OAuth2MembersApiController@getMembers", + "OAuth2MembersApiController@getAll", $params, array(), array(), @@ -123,7 +123,7 @@ final class OAuth2MembersApiTest extends ProtectedApiTest $headers = array("HTTP_Authorization" => " Bearer " . $this->access_token); $response = $this->action( "GET", - "OAuth2MembersApiController@getMembers", + "OAuth2MembersApiController@getAll", $params, array(), array(), diff --git a/tests/OAuth2TagsApiTest.php b/tests/OAuth2TagsApiTest.php index eca56d6f..48cf685c 100644 --- a/tests/OAuth2TagsApiTest.php +++ b/tests/OAuth2TagsApiTest.php @@ -27,7 +27,7 @@ class OAuth2TagsApiTest extends ProtectedApiTest $headers = array("HTTP_Authorization" => " Bearer " . $this->access_token); $response = $this->action( "GET", - "OAuth2TagsApiController@getTags", + "OAuth2TagsApiController@getAll", $params, array(), array(),