From b282c01333bc0173f10e802dc875cfd1b0a049c8 Mon Sep 17 00:00:00 2001 From: Sebastian Marcet Date: Wed, 28 Mar 2018 12:42:37 -0300 Subject: [PATCH] Added endpoint to update category group PUT /api/v1/summits/{id}/track-groups/{track_group_id} Payload Payload * class_name (required:in:PresentationCategoryGroup,PrivatePresentationCategoryGroup) * name (sometimes|string) * description (sometimes|string) * color (sometimes|hex_color) Payload for private groups ( optional if class_name == 'PrivatePresentationCategoryGroup' * submission_begin_date (sometimes|date_format:U) * submission_end_date (sometimes|date_format:U|required_with:submission_begin_date|after:submission_begin_date) * max_submission_allowed_per_user (sometimes|integer|min:1) Change-Id: Iefb7d677466e9e90ddd052e5680d4ea7f47b4ec0 --- ...th2PresentationCategoryGroupController.php | 54 +++++++++++ app/Http/routes.php | 3 + .../SilverStripeDoctrineRepository.php | 1 + .../PresentationCategoryGroupService.php | 6 +- database/seeds/ApiEndpointsSeeder.php | 94 +++++++++++-------- 5 files changed, 117 insertions(+), 41 deletions(-) diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2PresentationCategoryGroupController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2PresentationCategoryGroupController.php index 10565fd7..fe4bb2da 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2PresentationCategoryGroupController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2PresentationCategoryGroupController.php @@ -291,6 +291,60 @@ final class OAuth2PresentationCategoryGroupController } } + public function getTrackGroupBySummit($summit_id, $track_group_id){ + + } + + /** + * @param $summit_id + * @param $track_group_id + * @return mixed + */ + public function updateTrackGroupBySummit($summit_id, $track_group_id){ + try { + + if(!Request::isJson()) return $this->error400(); + $data = Input::json(); + $payload = $data->all(); + $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); + if (is_null($summit)) return $this->error404(); + + $rules = PresentationCategoryGroupValidationRulesFactory::build($payload, true); + // Creates a Validator instance and validates the data. + $validation = Validator::make($payload, $rules); + + if ($validation->fails()) { + $messages = $validation->messages()->toArray(); + + return $this->error412 + ( + $messages + ); + } + + $track_group = $this->presentation_category_group_service->updateTrackGroup($summit, $track_group_id, $payload); + + return $this->updated(SerializerRegistry::getInstance()->getSerializer($track_group)->serialize()); + } + catch (ValidationException $ex1) { + Log::warning($ex1); + return $this->error412([$ex1->getMessage()]); + } + catch(EntityNotFoundException $ex2) + { + Log::warning($ex2); + return $this->error404(['message'=> $ex2->getMessage()]); + } + catch (Exception $ex) { + Log::error($ex); + return $this->error500($ex); + } + } + + public function deleteTrackGroupBySummit($summit_id, $track_group_id){ + + } + /** * @param $summit_id * @return mixed diff --git a/app/Http/routes.php b/app/Http/routes.php index 33b82fae..074a075c 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -492,6 +492,9 @@ Route::group([ Route::post('', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2PresentationCategoryGroupController@addTrackGroupBySummit']); Route::group(['prefix' => '{track_group_id}'], function () { + Route::get('', 'OAuth2PresentationCategoryGroupController@getTrackGroupBySummit'); + Route::put('', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2PresentationCategoryGroupController@updateTrackGroupBySummit']); + Route::delete('', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2PresentationCategoryGroupController@deleteTrackGroupBySummit']); Route::group(['prefix' => 'tracks'], function () { diff --git a/app/Repositories/SilverStripeDoctrineRepository.php b/app/Repositories/SilverStripeDoctrineRepository.php index 591567f6..5f9d869a 100644 --- a/app/Repositories/SilverStripeDoctrineRepository.php +++ b/app/Repositories/SilverStripeDoctrineRepository.php @@ -55,6 +55,7 @@ abstract class SilverStripeDoctrineRepository extends DoctrineRepository $resource_server_ctx = App::make(\models\oauth2\IResourceServerContext::class); $member_repository = App::make(\models\main\IMemberRepository::class); $member_id = $resource_server_ctx->getCurrentUserExternalId(); + if(is_null($member_id)) return false; $member = $member_repository->getById($member_id); if (!is_null($member)){ return $member->isOnGroup($group_code); diff --git a/app/Services/Model/PresentationCategoryGroupService.php b/app/Services/Model/PresentationCategoryGroupService.php index ca027f38..efb571d8 100644 --- a/app/Services/Model/PresentationCategoryGroupService.php +++ b/app/Services/Model/PresentationCategoryGroupService.php @@ -114,7 +114,7 @@ final class PresentationCategoryGroupService ( trans('validation_errors.PresentationCategoryGroupService.updateTrackGroup.NameAlreadyExists'), [ - 'name' => trim($data['name']), + 'name' => trim($data['name']), 'summit_id' => $summit->getId(), ] ); @@ -129,14 +129,14 @@ final class PresentationCategoryGroupService trans('not_found_errors.PresentationCategoryGroupService.updateTrackGroup.TrackGroupNotFound'), [ 'track_group_id' => $track_group_id, - 'summit_id' => $summit->getId(), + 'summit_id' => $summit->getId(), ] ); } Event::fire ( - new TrackGroupInserted + new TrackGroupUpdated ( $track_group->getId(), diff --git a/database/seeds/ApiEndpointsSeeder.php b/database/seeds/ApiEndpointsSeeder.php index f380ac32..512fab44 100644 --- a/database/seeds/ApiEndpointsSeeder.php +++ b/database/seeds/ApiEndpointsSeeder.php @@ -151,7 +151,7 @@ class ApiEndpointsSeeder extends Seeder sprintf(SummitScopes::WriteAttendeesData, $current_realm), ], ], - array( + [ 'name' => 'get-attendee-schedule', 'route' => '/api/v1/summits/{id}/attendees/{attendee_id}/schedule', 'http_method' => 'GET', @@ -159,19 +159,19 @@ class ApiEndpointsSeeder extends Seeder sprintf(SummitScopes::ReadSummitData, $current_realm), sprintf(SummitScopes::ReadAllSummitData, $current_realm) ], - ), - array( + ], + [ 'name' => 'add-event-attendee-schedule', 'route' => '/api/v1/summits/{id}/attendees/{attendee_id}/schedule/{event_id}', 'http_method' => 'POST', 'scopes' => [sprintf(SummitScopes::WriteSummitData, $current_realm)], - ), - array( + ], + [ 'name' => 'delete-event-attendee-schedule', 'route' => '/api/v1/summits/{id}/attendees/{attendee_id}/schedule/{event_id}', 'http_method' => 'DELETE', 'scopes' => [sprintf(SummitScopes::WriteSummitData, $current_realm)], - ), + ], array( 'name' => 'checking-event-attendee-schedule', 'route' => '/api/v1/summits/{id}/attendees/{attendee_id}/schedule/{event_id}/check-in', @@ -443,19 +443,19 @@ class ApiEndpointsSeeder extends Seeder 'http_method' => 'POST', 'scopes' => [sprintf(SummitScopes::WriteSummitData, $current_realm)], ), - array( + [ 'name' => 'add-event-feedback-v2', 'route' => '/api/v2/summits/{id}/events/{event_id}/feedback', 'http_method' => 'POST', 'scopes' => [sprintf(SummitScopes::WriteSummitData, $current_realm)], - ), - array( + ], + [ 'name' => 'update-event-feedback-v2', 'route' => '/api/v2/summits/{id}/events/{event_id}/feedback', 'http_method' => 'PUT', 'scopes' => [sprintf(SummitScopes::WriteSummitData, $current_realm)], - ), - array( + ], + [ 'name' => 'get-event-feedback', 'route' => '/api/v1/summits/{id}/events/{event_id}/feedback/{attendee_id?}', 'http_method' => 'GET', @@ -463,13 +463,13 @@ class ApiEndpointsSeeder extends Seeder sprintf(SummitScopes::ReadSummitData, $current_realm), sprintf(SummitScopes::ReadAllSummitData, $current_realm) ], - ), - array( + ], + [ 'name' => 'delete-rsvp', 'route' => '/api/v1/summits/{id}/attendees/{attendee_id}/schedule/{event_id}/rsvp', 'http_method' => 'DELETE', 'scopes' => [sprintf(SummitScopes::WriteSummitData, $current_realm)], - ), + ], // locations [ 'name' => 'get-locations', @@ -1205,6 +1205,24 @@ class ApiEndpointsSeeder extends Seeder sprintf(SummitScopes::WriteSummitData, $current_realm) ], ], + [ + 'name' => 'update-track-group', + 'route' => '/api/v1/summits/{id}/track-groups/{track_group_id}', + 'http_method' => 'PUT', + 'scopes' => [ + sprintf(SummitScopes::WriteTrackGroupsData, $current_realm), + sprintf(SummitScopes::WriteSummitData, $current_realm) + ], + ], + [ + 'name' => 'delete-track-group', + 'route' => '/api/v1/summits/{id}/track-groups/{track_group_id}', + 'http_method' => 'DELETE', + 'scopes' => [ + sprintf(SummitScopes::WriteTrackGroupsData, $current_realm), + sprintf(SummitScopes::WriteSummitData, $current_realm) + ], + ], [ 'name' => 'associate-track-2-track-group', 'route' => '/api/v1/summits/{id}/track-groups/{track_group_id}/tracks/{track_id}', @@ -1255,7 +1273,7 @@ class ApiEndpointsSeeder extends Seeder 'scopes' => [sprintf('%s/summits/confirm-external-orders', $current_realm)], ), //videos - array( + [ 'name' => 'get-presentation-videos', 'route' => '/api/v1/summits/{id}/presentations/{presentation_id}/videos', 'http_method' => 'GET', @@ -1263,8 +1281,8 @@ class ApiEndpointsSeeder extends Seeder sprintf(SummitScopes::ReadSummitData, $current_realm), sprintf(SummitScopes::ReadAllSummitData, $current_realm) ], - ), - array( + ], + [ 'name' => 'get-presentation-video', 'route' => '/api/v1/summits/{id}/presentations/{presentation_id}/video/{video_id}', 'http_method' => 'GET', @@ -1272,76 +1290,76 @@ class ApiEndpointsSeeder extends Seeder sprintf(SummitScopes::ReadSummitData, $current_realm), sprintf(SummitScopes::ReadAllSummitData, $current_realm) ], - ), - array( + ], + [ 'name' => 'create-presentation-video', 'route' => '/api/v1/summits/{id}/presentations/{presentation_id}/videos', 'http_method' => 'POST', 'scopes' => [sprintf(SummitScopes::WriteVideoData, $current_realm)], - ), - array( + ], + [ 'name' => 'update-presentation-video', 'route' => '/api/v1/summits/{id}/presentations/{presentation_id}/videos/{video_id}', 'http_method' => 'PUT', 'scopes' => [sprintf(SummitScopes::WriteVideoData, $current_realm)], - ), - array( + ], + [ 'name' => 'delete-presentation-video', 'route' => '/api/v1/summits/{id}/presentations/{presentation_id}/videos/{video_id}', 'http_method' => 'DELETE', 'scopes' => [sprintf(SummitScopes::WriteVideoData, $current_realm)], - ), + ], //members - array( + [ 'name' => 'get-own-member', 'route' => '/api/v1/summits/{id}/members/{member_id}', 'http_method' => 'GET', 'scopes' => [sprintf('%s/me/read', $current_realm)], - ), - array( + ], + [ 'name' => 'get-own-member-favorites', 'route' => '/api/v1/summits/{id}/members/{member_id}/favorites', 'http_method' => 'GET', 'scopes' => [sprintf('%s/me/read', $current_realm)], - ), - array( + ], + [ 'name' => 'add-2-own-member-favorites', 'route' => '/api/v1/summits/{id}/members/{member_id}/favorites/{event_id}', 'http_method' => 'POST', 'scopes' => [sprintf('%s/me/summits/events/favorites/add', $current_realm)], - ), - array( + ], + [ 'name' => 'delete-rsvp-member', 'route' => '/api/v1/summits/{id}/members/{member_id}/schedule/{event_id}/rsvp', 'http_method' => 'DELETE', 'scopes' => [sprintf(SummitScopes::WriteSummitData, $current_realm)], - ), - array( + ], + [ 'name' => 'remove-from-own-member-favorites', 'route' => '/api/v1/summits/{id}/members/{member_id}/favorites/{event_id}', 'http_method' => 'DELETE', 'scopes' => [sprintf('%s/me/summits/events/favorites/delete', $current_realm)], - ), - [ + ], + [ 'name' => 'get-own-member-schedule', 'route' => '/api/v1/summits/{id}/members/{member_id}/schedule', 'http_method' => 'GET', 'scopes' => [sprintf('%s/me/read', $current_realm)], ], - [ + [ 'name' => 'add-2-own-member-schedule', 'route' => '/api/v1/summits/{id}/members/{member_id}/schedule/{event_id}', 'http_method' => 'POST', 'scopes' => [sprintf(SummitScopes::WriteSummitData, $current_realm)], ], - [ + [ 'name' => 'remove-from-own-member-schedule', 'route' => '/api/v1/summits/{id}/members/{member_id}/schedule/{event_id}', 'http_method' => 'DELETE', 'scopes' => [sprintf(SummitScopes::WriteSummitData, $current_realm)], ], // notifications - [ + [ 'name' => 'get-notifications', 'route' => '/api/v1/summits/{id}/notifications', 'http_method' => 'GET',