diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitPromoCodesApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitPromoCodesApiController.php index 597e3fd6..89eaeb8e 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitPromoCodesApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitPromoCodesApiController.php @@ -184,4 +184,18 @@ final class OAuth2SummitPromoCodesApiController extends OAuth2ProtectedControlle return $this->error500($ex); } } + + /** + * @param $summit_id + * @return mixed + */ + public function getMetadata($summit_id){ + $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); + if (is_null($summit)) return $this->error404(); + + return $this->ok + ( + $this->promo_code_repository->getMetadata($summit) + ); + } } \ No newline at end of file diff --git a/app/Http/routes.php b/app/Http/routes.php index 84c85e64..45abbe12 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -332,9 +332,8 @@ Route::group([ // promo codes Route::group(['prefix' => 'promo-codes'], function () { - Route::get('', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2SummitPromoCodesApiController@getAllBySummit']); - + Route::get('metadata', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2SummitPromoCodesApiController@getMetadata']); }); }); diff --git a/app/Models/Foundation/Summit/PromoCodes/MemberSummitRegistrationPromoCode.php b/app/Models/Foundation/Summit/PromoCodes/MemberSummitRegistrationPromoCode.php index 50c59862..66d27ddd 100644 --- a/app/Models/Foundation/Summit/PromoCodes/MemberSummitRegistrationPromoCode.php +++ b/app/Models/Foundation/Summit/PromoCodes/MemberSummitRegistrationPromoCode.php @@ -136,6 +136,22 @@ class MemberSummitRegistrationPromoCode extends SummitRegistrationPromoCode const ClassName = 'MEMBER_PROMO_CODE'; + public static $metadata = [ + 'class_name' => self::ClassName, + 'first_name' => 'string', + 'last_name' => 'string', + 'email' => 'string', + 'type' => "enum(VIP,ATC,MEDIA ANALYST,SPONSOR)", + 'owner_id' => 'integer' + ]; + + /** + * @return array + */ + public static function getMetadata(){ + return array_merge(SummitRegistrationPromoCode::getMetadata(), self::$metadata); + } + /** * @return string */ diff --git a/app/Models/Foundation/Summit/PromoCodes/SpeakerSummitRegistrationPromoCode.php b/app/Models/Foundation/Summit/PromoCodes/SpeakerSummitRegistrationPromoCode.php index b3b806c5..4f86ef98 100644 --- a/app/Models/Foundation/Summit/PromoCodes/SpeakerSummitRegistrationPromoCode.php +++ b/app/Models/Foundation/Summit/PromoCodes/SpeakerSummitRegistrationPromoCode.php @@ -98,4 +98,16 @@ class SpeakerSummitRegistrationPromoCode extends SummitRegistrationPromoCode public function getClassName(){ return self::ClassName; } + + public static $metadata = [ + 'class_name' => self::ClassName, + 'speaker_id' => 'integer' + ]; + + /** + * @return array + */ + public static function getMetadata(){ + return array_merge(SummitRegistrationPromoCode::getMetadata(), self::$metadata); + } } \ No newline at end of file diff --git a/app/Models/Foundation/Summit/PromoCodes/SponsorSummitRegistrationPromoCode.php b/app/Models/Foundation/Summit/PromoCodes/SponsorSummitRegistrationPromoCode.php index af1f282c..1bf3ac73 100644 --- a/app/Models/Foundation/Summit/PromoCodes/SponsorSummitRegistrationPromoCode.php +++ b/app/Models/Foundation/Summit/PromoCodes/SponsorSummitRegistrationPromoCode.php @@ -80,4 +80,16 @@ class SponsorSummitRegistrationPromoCode extends MemberSummitRegistrationPromoCo public function hasSponsor(){ return $this->getSponsorId() > 0; } + + public static $metadata = [ + 'class_name' => self::ClassName, + 'sponsor_id' => 'integer' + ]; + + /** + * @return array + */ + public static function getMetadata(){ + return array_merge(MemberSummitRegistrationPromoCode::getMetadata(), self::$metadata); + } } \ No newline at end of file diff --git a/app/Models/Foundation/Summit/PromoCodes/SummitRegistrationPromoCode.php b/app/Models/Foundation/Summit/PromoCodes/SummitRegistrationPromoCode.php index 746456eb..52e048e3 100644 --- a/app/Models/Foundation/Summit/PromoCodes/SummitRegistrationPromoCode.php +++ b/app/Models/Foundation/Summit/PromoCodes/SummitRegistrationPromoCode.php @@ -178,4 +178,20 @@ class SummitRegistrationPromoCode extends SilverstripeBaseModel public function getClassName(){ return self::ClassName; } + + public static $metadata = [ + 'code' => 'string', + 'email_sent' => 'boolean', + 'redeemed' => 'boolean', + 'source' => "enum(CSV,ADMIN)", + 'summit_id' => 'integer', + 'creator_id' => 'integer', + ]; + + /** + * @return array + */ + public static function getMetadata(){ + return self::$metadata; + } } diff --git a/app/Models/Foundation/Summit/Repositories/ISummitRegistrationPromoCodeRepository.php b/app/Models/Foundation/Summit/Repositories/ISummitRegistrationPromoCodeRepository.php index 652033ea..ed382149 100644 --- a/app/Models/Foundation/Summit/Repositories/ISummitRegistrationPromoCodeRepository.php +++ b/app/Models/Foundation/Summit/Repositories/ISummitRegistrationPromoCodeRepository.php @@ -35,4 +35,10 @@ interface ISummitRegistrationPromoCodeRepository extends IBaseRepository Filter $filter = null, Order $order = null ); + + /** + * @param Summit $summit + * @return array + */ + public function getMetadata( Summit $summit); } \ No newline at end of file diff --git a/app/Repositories/Summit/DoctrineSummitRegistrationPromoCodeRepository.php b/app/Repositories/Summit/DoctrineSummitRegistrationPromoCodeRepository.php index 126b9626..056da2b1 100644 --- a/app/Repositories/Summit/DoctrineSummitRegistrationPromoCodeRepository.php +++ b/app/Repositories/Summit/DoctrineSummitRegistrationPromoCodeRepository.php @@ -174,4 +174,17 @@ class DoctrineSummitRegistrationPromoCodeRepository $data ); } + + /** + * @param Summit $summit + * @return array + */ + public function getMetadata(Summit $summit) + { + return [ + MemberSummitRegistrationPromoCode::getMetadata(), + SpeakerSummitRegistrationPromoCode::getMetadata(), + SponsorSummitRegistrationPromoCode::getMetadata() + ]; + } } \ No newline at end of file diff --git a/database/seeds/ApiEndpointsSeeder.php b/database/seeds/ApiEndpointsSeeder.php index 98cd0bae..1125cfbe 100644 --- a/database/seeds/ApiEndpointsSeeder.php +++ b/database/seeds/ApiEndpointsSeeder.php @@ -658,7 +658,6 @@ class ApiEndpointsSeeder extends Seeder 'scopes' => [sprintf('%s/summits/read-notifications', $current_realm)], ), // promo codes - // notifications array( 'name' => 'get-promo-codes', 'route' => '/api/v1/summits/{id}/promo-codes', @@ -667,9 +666,17 @@ class ApiEndpointsSeeder extends Seeder sprintf(SummitScopes::ReadSummitData, $current_realm), sprintf(SummitScopes::ReadAllSummitData, $current_realm) ], + ), + array( + 'name' => 'get-promo-codes-metadata', + 'route' => '/api/v1/summits/{id}/promo-codes/metadata', + 'http_method' => 'GET', + 'scopes' => [ + sprintf(SummitScopes::ReadSummitData, $current_realm), + sprintf(SummitScopes::ReadAllSummitData, $current_realm) + ], ) ]); - } private function seedMemberEndpoints(){ diff --git a/tests/OAuth2PromoCodesApiTest.php b/tests/OAuth2PromoCodesApiTest.php index f83dca80..21c98d19 100644 --- a/tests/OAuth2PromoCodesApiTest.php +++ b/tests/OAuth2PromoCodesApiTest.php @@ -174,4 +174,30 @@ final class OAuth2PromoCodesApiTest extends ProtectedApiTest $promo_codes = json_decode($content); $this->assertTrue(!is_null($promo_codes)); } + + public function testGetPromoCodesMetadata(){ + $params = [ + 'id' => 23, + ]; + + $headers = [ + "HTTP_Authorization" => " Bearer " . $this->access_token, + "CONTENT_TYPE" => "application/json" + ]; + + $response = $this->action( + "GET", + "OAuth2SummitPromoCodesApiController@getMetadata", + $params, + [], + [], + [], + $headers + ); + + $content = $response->getContent(); + $this->assertResponseStatus(200); + $metadata = json_decode($content); + $this->assertTrue(!is_null($metadata)); + } } \ No newline at end of file