From 6f70e897f06f80ab57309318fa15e2ee08ea938c Mon Sep 17 00:00:00 2001 From: Sebastian Marcet Date: Tue, 17 Apr 2018 14:31:00 -0300 Subject: [PATCH] Added endpoint to delete push notifications DELETE /api/v1/summits/{id}/notifications/{notification_id} Change-Id: I62f92fdd9ccf242d9b799e35635c1f47e0502a27 --- ...OAuth2SummitNotificationsApiController.php | 25 ++++++++++++++- app/Http/routes.php | 1 + app/Models/Foundation/Summit/Summit.php | 10 ++++++ .../Model/ISummitPushNotificationService.php | 9 ++++++ .../Model/SummitPushNotificationService.php | 32 ++++++++++++++++++- database/seeds/ApiEndpointsSeeder.php | 9 ++++++ resources/lang/en/not_found_errors.php | 5 +-- 7 files changed, 87 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitNotificationsApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitNotificationsApiController.php index 53fc5925..b2008f01 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitNotificationsApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitNotificationsApiController.php @@ -272,6 +272,30 @@ class OAuth2SummitNotificationsApiController extends OAuth2ProtectedController } } + + /** + * @param $summit_id + * @param $notification_id + * @return mixed + */ + public function deleteNotification($summit_id, $notification_id){ + try { + $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); + if (is_null($summit)) return $this->error404(); + $this->push_notification_service->deleteNotification($summit, $notification_id); + return $this->deleted(); + } catch (ValidationException $ex1) { + Log::warning($ex1); + return $this->error412(array($ex1->getMessage())); + } catch (EntityNotFoundException $ex2) { + Log::warning($ex2); + return $this->error404(array('message' => $ex2->getMessage())); + } catch (Exception $ex) { + Log::error($ex); + return $this->error500($ex); + } + } + /** * @param $summit_id * @param $notification_id @@ -330,7 +354,6 @@ class OAuth2SummitNotificationsApiController extends OAuth2ProtectedController } } - /** * @param $summit_id * @return mixed diff --git a/app/Http/routes.php b/app/Http/routes.php index ce8dcbee..f6ba2abc 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -245,6 +245,7 @@ Route::group([ Route::get('', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2SummitNotificationsApiController@getById']); Route::put('approve', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2SummitNotificationsApiController@approveNotification']); Route::delete('approve', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2SummitNotificationsApiController@unApproveNotification']); + Route::delete('', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2SummitNotificationsApiController@deleteNotification']); }); }); diff --git a/app/Models/Foundation/Summit/Summit.php b/app/Models/Foundation/Summit/Summit.php index df0ef018..10a00d16 100644 --- a/app/Models/Foundation/Summit/Summit.php +++ b/app/Models/Foundation/Summit/Summit.php @@ -2024,6 +2024,16 @@ SQL; return $notification === false ? null : $notification; } + /** + * @param SummitPushNotification $notification + * @return $this + */ + public function removeNotification(SummitPushNotification $notification){ + $this->notifications->removeElement($notification); + $notification->clearSummit(); + return $this; + } + /** * @return string */ diff --git a/app/Services/Model/ISummitPushNotificationService.php b/app/Services/Model/ISummitPushNotificationService.php index 7f60a614..df3dec60 100644 --- a/app/Services/Model/ISummitPushNotificationService.php +++ b/app/Services/Model/ISummitPushNotificationService.php @@ -51,4 +51,13 @@ interface ISummitPushNotificationService * @throws EntityNotFoundException */ public function unApproveNotification(Summit $summit, Member $current_member, $notification_id); + + /** + * @param Summit $summit + * @param int $notification_id + * @return void + * @throws ValidationException + * @throws EntityNotFoundException + */ + public function deleteNotification(Summit $summit, $notification_id); } \ No newline at end of file diff --git a/app/Services/Model/SummitPushNotificationService.php b/app/Services/Model/SummitPushNotificationService.php index 8224aaaf..df66584d 100644 --- a/app/Services/Model/SummitPushNotificationService.php +++ b/app/Services/Model/SummitPushNotificationService.php @@ -212,7 +212,7 @@ final class SummitPushNotificationService ( trans ( - "not_found_errors.SummitPushNotificationService.approveNotification.unApproveNotification", + "not_found_errors.SummitPushNotificationService.unApproveNotification.NotificationNotFound", [ 'summit_id' => $summit->getId(), 'notification_id' => $notification_id @@ -225,4 +225,34 @@ final class SummitPushNotificationService return $notification->unApprove(); }); } + + /** + * @param Summit $summit + * @param int $notification_id + * @return void + * @throws ValidationException + * @throws EntityNotFoundException + */ + public function deleteNotification(Summit $summit, $notification_id) + { + return $this->tx_service->transaction(function() use($summit, $notification_id){ + $notification = $summit->getNotificationById($notification_id); + if(is_null($notification)){ + throw new EntityNotFoundException + ( + trans + ( + "not_found_errors.SummitPushNotificationService.deleteNotification.NotificationNotFound", + [ + 'summit_id' => $summit->getId(), + 'notification_id' => $notification_id + ] + ) + + ); + } + + $summit->removeNotification($notification); + }); + } } \ No newline at end of file diff --git a/database/seeds/ApiEndpointsSeeder.php b/database/seeds/ApiEndpointsSeeder.php index b6d91808..e24ddad3 100644 --- a/database/seeds/ApiEndpointsSeeder.php +++ b/database/seeds/ApiEndpointsSeeder.php @@ -1455,6 +1455,15 @@ class ApiEndpointsSeeder extends Seeder sprintf(SummitScopes::WriteNotifications, $current_realm) ], ], + [ + 'name' => 'delete-notification', + 'route' => '/api/v1/summits/{id}/notifications/{notification_id}', + 'http_method' => 'DELETE', + 'scopes' => [ + sprintf(SummitScopes::WriteSummitData, $current_realm), + sprintf(SummitScopes::WriteNotifications, $current_realm) + ], + ], // promo codes [ 'name' => 'get-promo-codes', diff --git a/resources/lang/en/not_found_errors.php b/resources/lang/en/not_found_errors.php index e808395d..8fbe1b1a 100644 --- a/resources/lang/en/not_found_errors.php +++ b/resources/lang/en/not_found_errors.php @@ -74,6 +74,7 @@ return [ 'SummitPushNotificationService.addPushNotification.EventNotFound' => 'event :event_id does not belongs to summit :summit_id schedule', 'SummitPushNotificationService.addPushNotification.GroupNotFound' => 'group :group_id not found', 'SummitPushNotificationService.addPushNotification.MemberNotFound' => 'member :member_id not found', - 'SummitPushNotificationService.approveNotification.approveNotification' => 'notification :notification_id not found on summit :summit_id', - 'SummitPushNotificationService.approveNotification.unApproveNotification'=> 'notification :notification_id not found on summit :summit_id', + 'SummitPushNotificationService.approveNotification.NotificationNotFound' => 'notification :notification_id not found on summit :summit_id', + 'SummitPushNotificationService.unApproveNotification.NotificationNotFound'=> 'notification :notification_id not found on summit :summit_id', + 'SummitPushNotificationService.deleteNotification.NotificationNotFound'=> 'notification :notification_id not found on summit :summit_id', ]; \ No newline at end of file