added get metadata promo codes endpoint

GET /api/v1/summits/{id}/promo-codes/metadata

Change-Id: Ife34a1103cc0b5fe16b8ad9937855d57e7eee9b1
This commit is contained in:
Sebastian Marcet 2018-01-22 11:26:47 -03:00
parent b65bc3db33
commit 8e870afbed
10 changed files with 125 additions and 4 deletions

View File

@ -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)
);
}
}

View File

@ -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']);
});
});

View File

@ -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
*/

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -35,4 +35,10 @@ interface ISummitRegistrationPromoCodeRepository extends IBaseRepository
Filter $filter = null,
Order $order = null
);
/**
* @param Summit $summit
* @return array
*/
public function getMetadata( Summit $summit);
}

View File

@ -174,4 +174,17 @@ class DoctrineSummitRegistrationPromoCodeRepository
$data
);
}
/**
* @param Summit $summit
* @return array
*/
public function getMetadata(Summit $summit)
{
return [
MemberSummitRegistrationPromoCode::getMetadata(),
SpeakerSummitRegistrationPromoCode::getMetadata(),
SponsorSummitRegistrationPromoCode::getMetadata()
];
}
}

View File

@ -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(){

View File

@ -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));
}
}