Added endpoint

DELETE /api/v1/summits/{id}/rsvp-templates/{template_id}/questions/{question_id}

Change-Id: Ifb42b15c9879d53dc845af580381a04f2ae3e03d
This commit is contained in:
Sebastian Marcet 2018-03-20 14:26:34 -03:00
parent 8b8e08e051
commit 3b92c8470a
6 changed files with 125 additions and 1 deletions

View File

@ -27,6 +27,7 @@ use utils\Filter;
use utils\FilterParser;
use utils\OrderParser;
use utils\PagingInfo;
use Exception;
/**
* Class OAuth2SummitRSVPTemplatesApiController
* @package App\Http\Controllers
@ -364,4 +365,35 @@ final class OAuth2SummitRSVPTemplatesApiController extends OAuth2ProtectedContro
return $this->error500($ex);
}
}
/**
* @param $summit_id
* @param $template_id
* @param $question_id
* @return mixed
*/
public function deleteRSVPTemplateQuestion($summit_id, $template_id, $question_id){
try {
$summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id);
if (is_null($summit)) return $this->error404();
$this->rsvp_template_service->deleteQuestion($summit, $template_id, $question_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);
}
}
}

View File

@ -175,6 +175,14 @@ Route::group([
Route::group(['prefix' => '{question_id}'], function () {
Route::put('', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2SummitRSVPTemplatesApiController@updateRSVPTemplateQuestion']);
Route::get('', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2SummitRSVPTemplatesApiController@getRSVPTemplateQuestion']);
Route::delete('', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2SummitRSVPTemplatesApiController@deleteRSVPTemplateQuestion']);
// multi values questions
Route::group(['prefix' => 'values'], function () {
Route::group(['prefix' => '{value_id}'], function () {
});
});
});
});
});

View File

@ -51,4 +51,14 @@ interface IRSVPTemplateService
*/
public function updateQuestion(Summit $summit, $template_id, $question_id, array $payload);
/**
* @param Summit $summit
* @param int $template_id
* @param int $question_id
* @return void
* @throws EntityNotFoundException
* @throws ValidationException
*/
public function deleteQuestion(Summit $summit, $template_id, $question_id);
}

View File

@ -45,7 +45,6 @@ final class RSVPTemplateService implements IRSVPTemplateService
$this->tx_service = $tx_service;
}
/**
* @param Summit $summit
* @param int $template_id
@ -188,4 +187,50 @@ final class RSVPTemplateService implements IRSVPTemplateService
});
}
/**
* @param Summit $summit
* @param int $template_id
* @param int $question_id
* @return void
* @throws EntityNotFoundException
* @throws ValidationException
*/
public function deleteQuestion(Summit $summit, $template_id, $question_id)
{
return $this->tx_service->transaction(function() use($summit, $template_id, $question_id){
$template = $summit->getRSVPTemplateById($template_id);
if(is_null($template))
throw new EntityNotFoundException
(
trans
(
'not_found_errors.RSVPTemplateService.deleteQuestion.TemplateNotFound',
[
'summit_id' => $summit->getId(),
'template_id' => $template_id,
]
)
);
$question = $template->getQuestionById($question_id);
if(is_null($question))
throw new EntityNotFoundException
(
trans
(
'not_found_errors.RSVPTemplateService.deleteQuestion.QuestionNotFound',
[
'summit_id' => $summit->getId(),
'template_id' => $template_id,
'question_id' => $question_id,
]
)
);
$template->removeQuestion($question);
});
}
}

View File

@ -46,4 +46,6 @@ return [
'RSVPTemplateService.addQuestion.TemplateNotFound' => 'template :template_id not found on summit :summit_id',
'RSVPTemplateService.updateQuestion.TemplateNotFound' => 'template :template_id not found on summit :summit_id',
'RSVPTemplateService.updateQuestion.QuestionNotFound' => 'question :question_id not found on template :template_id',
'RSVPTemplateService.deleteQuestion.TemplateNotFound' => 'template :template_id not found on summit :summit_id',
'RSVPTemplateService.deleteQuestion.QuestionNotFound' => 'question :question_id not found on template :template_id',
];

View File

@ -242,4 +242,31 @@ final class OAuth2SummitRSVPTemplateApiTest extends ProtectedApiTest
$this->assertTrue(!is_null($question));
return $question;
}
public function testDeleteRSVPTemplateQuestion($summit_id = 24, $template_id = 13, $question_id = 85){
$params = [
'id' => $summit_id,
'template_id' => $template_id,
'question_id' => $question_id
];
$headers = [
"HTTP_Authorization" => " Bearer " . $this->access_token,
"CONTENT_TYPE" => "application/json"
];
$response = $this->action(
"DELETE",
"OAuth2SummitRSVPTemplatesApiController@deleteRSVPTemplateQuestion",
$params,
[],
[],
[],
$headers
);
$content = $response->getContent();
$this->assertResponseStatus(204);
}
}