Added endpoint delete summit event type
DELETE /api/v1/summits/{id}/event-types/{event_type_id} Change-Id: Id835571fc2e7b8644fbecb060cc1f890c92038d7
This commit is contained in:
parent
7c22e7401e
commit
51b5ab7b63
|
@ -112,6 +112,7 @@ final class OAuth2SummitsEventTypesApiController extends OAuth2ProtectedControll
|
|||
$filter = FilterParser::parse(Input::get('filter'), [
|
||||
'name' => ['=@', '=='],
|
||||
'class_name' => ['=='],
|
||||
'is_default' => ['=='],
|
||||
'black_out_times' => ['=='],
|
||||
'use_sponsors' => ['=='],
|
||||
'are_sponsors_mandatory' => ['=='],
|
||||
|
@ -267,4 +268,31 @@ final class OAuth2SummitsEventTypesApiController extends OAuth2ProtectedControll
|
|||
return $this->error500($ex);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $summit_id
|
||||
* @param $event_type_id
|
||||
* @return mixed
|
||||
*/
|
||||
public function deleteEventTypeBySummit($summit_id, $event_type_id)
|
||||
{
|
||||
try {
|
||||
|
||||
$summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id);
|
||||
if (is_null($summit)) return $this->error404();
|
||||
|
||||
$this->event_type_service->deleteEventType($summit, $event_type_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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -298,6 +298,7 @@ Route::group([
|
|||
Route::post('', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2SummitsEventTypesApiController@addEventTypeBySummit']);
|
||||
Route::group(['prefix' => '{event_type_id}'], function () {
|
||||
Route::put('', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2SummitsEventTypesApiController@updateEventTypeBySummit']);
|
||||
Route::delete('', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2SummitsEventTypesApiController@deleteEventTypeBySummit']);
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -147,12 +147,12 @@ class Summit extends SilverstripeBaseModel
|
|||
private $time_zone_id;
|
||||
|
||||
/**
|
||||
* @ORM\OneToMany(targetEntity="SummitAbstractLocation", mappedBy="summit", cascade={"persist"})
|
||||
* @ORM\OneToMany(targetEntity="SummitAbstractLocation", mappedBy="summit", cascade={"persist"}, orphanRemoval=true)
|
||||
*/
|
||||
private $locations;
|
||||
|
||||
/**
|
||||
* @ORM\OneToMany(targetEntity="SummitEvent", mappedBy="summit", cascade={"persist"})
|
||||
* @ORM\OneToMany(targetEntity="SummitEvent", mappedBy="summit", cascade={"persist"}, orphanRemoval=true)
|
||||
*/
|
||||
private $events;
|
||||
|
||||
|
@ -182,30 +182,30 @@ class Summit extends SilverstripeBaseModel
|
|||
private $logo;
|
||||
|
||||
/**
|
||||
* @ORM\OneToMany(targetEntity="models\summit\SummitEventType", mappedBy="summit", cascade={"persist"})
|
||||
* @ORM\OneToMany(targetEntity="models\summit\SummitEventType", mappedBy="summit", cascade={"persist"}, orphanRemoval=true)
|
||||
*/
|
||||
private $event_types;
|
||||
|
||||
/**
|
||||
* @ORM\OneToMany(targetEntity="models\summit\PresentationCategory", mappedBy="summit", cascade={"persist"})
|
||||
* @ORM\OneToMany(targetEntity="models\summit\PresentationCategory", mappedBy="summit", cascade={"persist"}, orphanRemoval=true)
|
||||
* @var PresentationCategory[]
|
||||
*/
|
||||
private $presentation_categories;
|
||||
|
||||
/**
|
||||
* @ORM\OneToMany(targetEntity="models\summit\SummitAttendee", mappedBy="summit", cascade={"persist"})
|
||||
* @ORM\OneToMany(targetEntity="models\summit\SummitAttendee", mappedBy="summit", cascade={"persist"}, orphanRemoval=true)
|
||||
* @var SummitAttendee[]
|
||||
*/
|
||||
private $attendees;
|
||||
|
||||
/**
|
||||
* @ORM\OneToMany(targetEntity="models\summit\PresentationCategoryGroup", mappedBy="summit", cascade={"persist"})
|
||||
* @ORM\OneToMany(targetEntity="models\summit\PresentationCategoryGroup", mappedBy="summit", cascade={"persist"}, orphanRemoval=true)
|
||||
* @var PresentationCategoryGroup[]
|
||||
*/
|
||||
private $category_groups;
|
||||
|
||||
/**
|
||||
* @ORM\OneToMany(targetEntity="models\summit\SummitTicketType", mappedBy="summit", cascade={"persist"})
|
||||
* @ORM\OneToMany(targetEntity="models\summit\SummitTicketType", mappedBy="summit", cascade={"persist"}, orphanRemoval=true)
|
||||
*/
|
||||
private $ticket_types;
|
||||
|
||||
|
@ -908,7 +908,7 @@ class Summit extends SilverstripeBaseModel
|
|||
}
|
||||
|
||||
/**
|
||||
* @ORM\OneToMany(targetEntity="models\summit\SummitEntityEvent", mappedBy="summit", cascade={"persist"})
|
||||
* @ORM\OneToMany(targetEntity="models\summit\SummitEntityEvent", mappedBy="summit", cascade={"persist"}, orphanRemoval=true)
|
||||
* @var SummitEntityEvent[]
|
||||
*/
|
||||
private $entity_events;
|
||||
|
@ -1478,6 +1478,16 @@ SQL;
|
|||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param SummitEventType $event_type
|
||||
* @return $this
|
||||
*/
|
||||
public function removeEventType(SummitEventType $event_type){
|
||||
$this->event_types->removeElement($event_type);
|
||||
$event_type->setSummit(null);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return PresentationCategory[]
|
||||
*/
|
||||
|
|
|
@ -45,6 +45,7 @@ final class DoctrineSummitEventTypeRepository
|
|||
return [
|
||||
'name' => 'et.type:json_string',
|
||||
'black_out_times' => 'et.black_out_times:json_boolean',
|
||||
'is_default' => 'et.is_default:json_boolean',
|
||||
'use_sponsors' => 'et.use_sponsors:json_boolean',
|
||||
'are_sponsors_mandatory' => 'et.are_sponsors_mandatory:json_boolean',
|
||||
'allows_attachment' => 'et.allows_attachment:json_boolean',
|
||||
|
|
|
@ -40,4 +40,13 @@ interface ISummitEventTypeService
|
|||
*/
|
||||
public function updateEventType(Summit $summit, $event_type_id, array $data);
|
||||
|
||||
/**
|
||||
* @param Summit $summit
|
||||
* @param int $event_type_id
|
||||
* @return void
|
||||
* @throws EntityNotFoundException
|
||||
* @throws ValidationException
|
||||
*/
|
||||
public function deleteEventType(Summit $summit, $event_type_id);
|
||||
|
||||
}
|
|
@ -29,7 +29,7 @@ final class SummitEventTypeService implements ISummitEventTypeService
|
|||
/**
|
||||
* @var ITransactionService
|
||||
*/
|
||||
private $tx_manager;
|
||||
private $tx_service;
|
||||
|
||||
/**
|
||||
* @var ISummitEventTypeRepository
|
||||
|
@ -39,15 +39,15 @@ final class SummitEventTypeService implements ISummitEventTypeService
|
|||
/**
|
||||
* SummitEventTypeService constructor.
|
||||
* @param ISummitEventTypeRepository $repository
|
||||
* @param ITransactionService $tx_manager
|
||||
* @param ITransactionService $tx_service
|
||||
*/
|
||||
public function __construct
|
||||
(
|
||||
ISummitEventTypeRepository $repository,
|
||||
ITransactionService $tx_manager
|
||||
ITransactionService $tx_service
|
||||
)
|
||||
{
|
||||
$this->tx_manager = $tx_manager;
|
||||
$this->tx_service = $tx_service;
|
||||
$this->repository = $repository;
|
||||
}
|
||||
|
||||
|
@ -60,7 +60,7 @@ final class SummitEventTypeService implements ISummitEventTypeService
|
|||
*/
|
||||
public function addEventType(Summit $summit, array $data)
|
||||
{
|
||||
return $this->tx_manager->transaction(function() use($summit, $data){
|
||||
return $this->tx_service->transaction(function() use($summit, $data){
|
||||
|
||||
$type = trim($data['name']);
|
||||
|
||||
|
@ -88,7 +88,7 @@ final class SummitEventTypeService implements ISummitEventTypeService
|
|||
*/
|
||||
public function updateEventType(Summit $summit, $event_type_id, array $data)
|
||||
{
|
||||
return $this->tx_manager->transaction(function() use($summit, $event_type_id, $data){
|
||||
return $this->tx_service->transaction(function() use($summit, $event_type_id, $data){
|
||||
|
||||
$type = isset($data['name']) ? trim($data['name']) : null;
|
||||
|
||||
|
@ -110,4 +110,34 @@ final class SummitEventTypeService implements ISummitEventTypeService
|
|||
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Summit $summit
|
||||
* @param int $event_type_id
|
||||
* @return void
|
||||
* @throws EntityNotFoundException
|
||||
* @throws ValidationException
|
||||
*/
|
||||
public function deleteEventType(Summit $summit, $event_type_id)
|
||||
{
|
||||
return $this->tx_service->transaction(function() use($event_type_id, $summit){
|
||||
|
||||
$event_type = $summit->getEventType($event_type_id);
|
||||
|
||||
if(is_null($event_type))
|
||||
throw new EntityNotFoundException
|
||||
(
|
||||
sprintf("event type id %s does not belongs to summit id %s", $event_type_id, $summit->getId())
|
||||
);
|
||||
|
||||
if ($event_type->isDefault())
|
||||
throw new ValidationException
|
||||
(
|
||||
sprintf("event type id %s is a default one and is not allowed to be deleted", $event_type_id)
|
||||
);
|
||||
|
||||
$summit->removeEventType($event_type);
|
||||
|
||||
});
|
||||
}
|
||||
}
|
|
@ -564,6 +564,15 @@ class ApiEndpointsSeeder extends Seeder
|
|||
sprintf(SummitScopes::WriteSummitData, $current_realm)
|
||||
],
|
||||
],
|
||||
[
|
||||
'name' => 'delete-event-type',
|
||||
'route' => '/api/v1/summits/{id}/event-types/{event_type_id}',
|
||||
'http_method' => 'DELETE',
|
||||
'scopes' => [
|
||||
sprintf(SummitScopes::WriteEventTypeData, $current_realm),
|
||||
sprintf(SummitScopes::WriteSummitData, $current_realm)
|
||||
],
|
||||
],
|
||||
//tracks
|
||||
array(
|
||||
'name' => 'get-tracks',
|
||||
|
|
|
@ -46,6 +46,71 @@ final class OAuth2EventTypesApiTest extends ProtectedApiTest
|
|||
$this->assertResponseStatus(200);
|
||||
$event_types = json_decode($content);
|
||||
$this->assertTrue(!is_null($event_types));
|
||||
return $event_types;
|
||||
}
|
||||
|
||||
public function testGetEventTypesDefaultOnes(){
|
||||
$params = [
|
||||
|
||||
'id' => 23,
|
||||
'page' => 1,
|
||||
'per_page' => 10,
|
||||
'filter' => 'is_default==1',
|
||||
'order' => '+name'
|
||||
];
|
||||
|
||||
$headers = [
|
||||
"HTTP_Authorization" => " Bearer " . $this->access_token,
|
||||
"CONTENT_TYPE" => "application/json"
|
||||
];
|
||||
|
||||
$response = $this->action(
|
||||
"GET",
|
||||
"OAuth2SummitsEventTypesApiController@getAllBySummit",
|
||||
$params,
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
$headers
|
||||
);
|
||||
|
||||
$content = $response->getContent();
|
||||
$this->assertResponseStatus(200);
|
||||
$event_types = json_decode($content);
|
||||
$this->assertTrue(!is_null($event_types));
|
||||
return $event_types;
|
||||
}
|
||||
|
||||
public function testGetEventTypesNonDefaultOnes(){
|
||||
$params = [
|
||||
|
||||
'id' => 23,
|
||||
'page' => 1,
|
||||
'per_page' => 10,
|
||||
'filter' => 'is_default==0',
|
||||
'order' => '+name'
|
||||
];
|
||||
|
||||
$headers = [
|
||||
"HTTP_Authorization" => " Bearer " . $this->access_token,
|
||||
"CONTENT_TYPE" => "application/json"
|
||||
];
|
||||
|
||||
$response = $this->action(
|
||||
"GET",
|
||||
"OAuth2SummitsEventTypesApiController@getAllBySummit",
|
||||
$params,
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
$headers
|
||||
);
|
||||
|
||||
$content = $response->getContent();
|
||||
$this->assertResponseStatus(200);
|
||||
$event_types = json_decode($content);
|
||||
$this->assertTrue(!is_null($event_types));
|
||||
return $event_types;
|
||||
}
|
||||
|
||||
public function testGetEventTypesByClassNamePresentationType(){
|
||||
|
@ -151,5 +216,62 @@ final class OAuth2EventTypesApiTest extends ProtectedApiTest
|
|||
return $event_type;
|
||||
}
|
||||
|
||||
public function testDeleteDefaultOne($summit_id = 23){
|
||||
|
||||
$event_types = $this->testGetEventTypesDefaultOnes($summit_id);
|
||||
|
||||
$params = [
|
||||
'id' => $summit_id,
|
||||
'event_type_id' => $event_types->data[0]->id,
|
||||
];
|
||||
|
||||
$headers = [
|
||||
"HTTP_Authorization" => " Bearer " . $this->access_token,
|
||||
"CONTENT_TYPE" => "application/json"
|
||||
];
|
||||
|
||||
$response = $this->action(
|
||||
"DELETE",
|
||||
"OAuth2SummitsEventTypesApiController@deleteEventTypeBySummit",
|
||||
$params,
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
$headers
|
||||
);
|
||||
|
||||
$content = $response->getContent();
|
||||
$this->assertResponseStatus(!empty($content));
|
||||
$this->assertResponseStatus(412);
|
||||
}
|
||||
|
||||
public function testDeleteNonDefaultOne($summit_id = 23){
|
||||
|
||||
$event_types = $this->testGetEventTypesNonDefaultOnes($summit_id);
|
||||
|
||||
$params = [
|
||||
'id' => $summit_id,
|
||||
'event_type_id' => $event_types->data[0]->id,
|
||||
];
|
||||
|
||||
$headers = [
|
||||
"HTTP_Authorization" => " Bearer " . $this->access_token,
|
||||
"CONTENT_TYPE" => "application/json"
|
||||
];
|
||||
|
||||
$response = $this->action(
|
||||
"DELETE",
|
||||
"OAuth2SummitsEventTypesApiController@deleteEventTypeBySummit",
|
||||
$params,
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
$headers
|
||||
);
|
||||
|
||||
$content = $response->getContent();
|
||||
$this->assertResponseStatus(empty($content));
|
||||
$this->assertResponseStatus(204);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue