Added endpoints to remove/add extra questions from tracks
PUT /api/v1/summits/{id}/tracks/{track_id}/extra-questions/{question_id} DELETE /api/v1/summits/{id}/tracks/{track_id}/extra-questions/{question_id} scopes %s/tracks/write %s/summits/write Change-Id: I5d3455dad8058a93f357b40adc7efdf5995b01c7
This commit is contained in:
parent
17276e7286
commit
62188c7815
|
@ -294,6 +294,11 @@ final class OAuth2SummitTracksApiController extends OAuth2ProtectedController
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $summit_id
|
||||
* @param $track_id
|
||||
* @return mixed
|
||||
*/
|
||||
public function getTrackExtraQuestionsBySummit($summit_id, $track_id){
|
||||
try {
|
||||
$summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id);
|
||||
|
@ -324,6 +329,62 @@ final class OAuth2SummitTracksApiController extends OAuth2ProtectedController
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $summit_id
|
||||
* @param $track_id
|
||||
* @param $question_id
|
||||
* @return mixed
|
||||
*/
|
||||
public function addTrackExtraQuestion($summit_id, $track_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->track_service->addTrackExtraQuestion($track_id, $question_id);
|
||||
|
||||
return $this->updated();
|
||||
|
||||
} 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 $track_id
|
||||
* @param $question_id
|
||||
* @return mixed
|
||||
*/
|
||||
public function removeTrackExtraQuestion($summit_id, $track_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->track_service->removeTrackExtraQuestion($track_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);
|
||||
}
|
||||
}
|
||||
|
||||
public function getTrackAllowedTagsBySummit($summit_id, $track_id){
|
||||
try {
|
||||
$summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id);
|
||||
|
|
|
@ -484,6 +484,18 @@ Route::group([
|
|||
|
||||
Route::group(['prefix' => 'extra-questions'], function () {
|
||||
Route::get('', 'OAuth2SummitTracksApiController@getTrackExtraQuestionsBySummit');
|
||||
Route::group(['prefix' => '{question_id}'], function () {
|
||||
|
||||
Route::put('', [
|
||||
'middleware' => 'auth.user:administrators|summit-front-end-administrators',
|
||||
'uses' => 'OAuth2SummitTracksApiController@addTrackExtraQuestion']
|
||||
);
|
||||
|
||||
Route::delete('', [
|
||||
'middleware' => 'auth.user:administrators|summit-front-end-administrators',
|
||||
'uses' => 'OAuth2SummitTracksApiController@removeTrackExtraQuestion'
|
||||
]);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -58,4 +58,23 @@ interface ISummitTrackService
|
|||
*/
|
||||
public function copyTracks(Summit $from_summit, Summit $to_summit);
|
||||
|
||||
/**
|
||||
* @param int $track_id
|
||||
* @param int $question_id
|
||||
* @return void
|
||||
* @throws EntityNotFoundException
|
||||
* @throws ValidationException
|
||||
*/
|
||||
public function addTrackExtraQuestion($track_id, $question_id);
|
||||
|
||||
|
||||
/**
|
||||
* @param int $track_id
|
||||
* @param int $question_id
|
||||
* @return void
|
||||
* @throws EntityNotFoundException
|
||||
* @throws ValidationException
|
||||
*/
|
||||
public function removeTrackExtraQuestion($track_id, $question_id);
|
||||
|
||||
}
|
|
@ -17,6 +17,7 @@ use App\Events\TrackInserted;
|
|||
use App\Events\TrackUpdated;
|
||||
use App\Models\Foundation\Summit\Factories\PresentationCategoryFactory;
|
||||
use App\Models\Foundation\Summit\Repositories\ISummitTrackRepository;
|
||||
use App\Models\Foundation\Summit\Repositories\ITrackQuestionTemplateRepository;
|
||||
use Illuminate\Support\Facades\Event;
|
||||
use libs\utils\ITransactionService;
|
||||
use models\exceptions\EntityNotFoundException;
|
||||
|
@ -35,29 +36,37 @@ final class SummitTrackService
|
|||
/**
|
||||
* @var ISummitTrackRepository
|
||||
*/
|
||||
private $repository;
|
||||
private $track_repository;
|
||||
|
||||
/**
|
||||
* @var ITagRepository
|
||||
*/
|
||||
private $tag_repository;
|
||||
|
||||
/**
|
||||
* @var ITrackQuestionTemplateRepository
|
||||
*/
|
||||
private $track_question_template_repository;
|
||||
|
||||
/**
|
||||
* SummitTrackService constructor.
|
||||
* @param ISummitTrackRepository $repository
|
||||
* @param ISummitTrackRepository $track_repository
|
||||
* @param ITagRepository $tag_repository
|
||||
* @param ITrackQuestionTemplateRepository $track_question_template_repository
|
||||
* @param ITransactionService $tx_service
|
||||
*/
|
||||
public function __construct
|
||||
(
|
||||
ISummitTrackRepository $repository,
|
||||
ISummitTrackRepository $track_repository,
|
||||
ITagRepository $tag_repository,
|
||||
ITrackQuestionTemplateRepository $track_question_template_repository,
|
||||
ITransactionService $tx_service
|
||||
)
|
||||
{
|
||||
parent::__construct($tx_service);
|
||||
$this->tag_repository = $tag_repository;
|
||||
$this->repository = $repository;
|
||||
$this->track_repository = $track_repository;
|
||||
$this->track_question_template_repository = $track_question_template_repository;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -189,7 +198,7 @@ final class SummitTrackService
|
|||
|
||||
Event::fire(new TrackDeleted($track->getSummitId(), $track->getId()));
|
||||
|
||||
$this->repository->delete($track);
|
||||
$this->track_repository->delete($track);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -249,4 +258,74 @@ final class SummitTrackService
|
|||
|
||||
return $added_tracks;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $track_id
|
||||
* @param int $question_id
|
||||
* @return void
|
||||
* @throws EntityNotFoundException
|
||||
* @throws ValidationException
|
||||
*/
|
||||
public function addTrackExtraQuestion($track_id, $question_id)
|
||||
{
|
||||
return $this->tx_service->transaction(function() use($track_id, $question_id){
|
||||
$track = $this->track_repository->getById($track_id);
|
||||
if(is_null($track))
|
||||
throw new EntityNotFoundException(
|
||||
trans
|
||||
(
|
||||
'not_found_errors.SummitTrackService.addTrackExtraQuestion.TrackNotFound',
|
||||
['track_id' => $track_id ]
|
||||
)
|
||||
);
|
||||
|
||||
$track_question_template = $this->track_question_template_repository->getById($question_id);
|
||||
|
||||
if(is_null($track_question_template))
|
||||
throw new EntityNotFoundException(
|
||||
trans
|
||||
(
|
||||
'not_found_errors.SummitTrackService.addTrackExtraQuestion.QuestionNotFound',
|
||||
['question_id' => $question_id ]
|
||||
)
|
||||
);
|
||||
|
||||
$track->addExtraQuestion($track_question_template);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $track_id
|
||||
* @param int $question_id
|
||||
* @return void
|
||||
* @throws EntityNotFoundException
|
||||
* @throws ValidationException
|
||||
*/
|
||||
public function removeTrackExtraQuestion($track_id, $question_id)
|
||||
{
|
||||
return $this->tx_service->transaction(function() use($track_id, $question_id){
|
||||
$track = $this->track_repository->getById($track_id);
|
||||
if(is_null($track))
|
||||
throw new EntityNotFoundException(
|
||||
trans
|
||||
(
|
||||
'not_found_errors.SummitTrackService.removeTrackExtraQuestion.TrackNotFound',
|
||||
['track_id' => $track_id ]
|
||||
)
|
||||
);
|
||||
|
||||
$track_question_template = $this->track_question_template_repository->getById($question_id);
|
||||
|
||||
if(is_null($track_question_template))
|
||||
throw new EntityNotFoundException(
|
||||
trans
|
||||
(
|
||||
'not_found_errors.SummitTrackService.removeTrackExtraQuestion.QuestionNotFound',
|
||||
['question_id' => $question_id ]
|
||||
)
|
||||
);
|
||||
|
||||
$track->removeExtraQuestion($track_question_template);
|
||||
});
|
||||
}
|
||||
}
|
|
@ -1190,6 +1190,24 @@ class ApiEndpointsSeeder extends Seeder
|
|||
sprintf(SummitScopes::ReadAllSummitData, $current_realm)
|
||||
],
|
||||
],
|
||||
[
|
||||
'name' => 'add-track-extra-questions',
|
||||
'route' => '/api/v1/summits/{id}/tracks/{track_id}/extra-questions/{question_id}',
|
||||
'http_method' => 'PUT',
|
||||
'scopes' => [
|
||||
sprintf(SummitScopes::WriteTracksData, $current_realm),
|
||||
sprintf(SummitScopes::WriteSummitData, $current_realm)
|
||||
],
|
||||
],
|
||||
[
|
||||
'name' => 'remove-track-extra-questions',
|
||||
'route' => '/api/v1/summits/{id}/tracks/{track_id}/extra-questions/{question_id}',
|
||||
'http_method' => 'DELETE',
|
||||
'scopes' => [
|
||||
sprintf(SummitScopes::WriteTracksData, $current_realm),
|
||||
sprintf(SummitScopes::WriteSummitData, $current_realm)
|
||||
],
|
||||
],
|
||||
[
|
||||
'name' => 'get-track-allowed-tags',
|
||||
'route' => '/api/v1/summits/{id}/tracks/{track_id}/allowed-tags',
|
||||
|
|
|
@ -100,5 +100,10 @@ return [
|
|||
'TrackQuestionTemplateService.deleteTrackQuestionValueTemplate.TrackQuestionTemplateValueNotFound' => 'track question template value :track_question_value_template_id not found',
|
||||
'TrackQuestionTemplateService.addTrackQuestionTemplate.TrackNotFound' => 'track :track_id not found',
|
||||
'TrackQuestionTemplateService.updateTrackQuestionTemplate.TrackNotFound' => 'track :track_id not found',
|
||||
'TrackQuestionTemplateService.updateTrackQuestionTemplate.DefaultValueNotFound' => 'default value :default_value not found'
|
||||
'TrackQuestionTemplateService.updateTrackQuestionTemplate.DefaultValueNotFound' => 'default value :default_value not found',
|
||||
// tracks
|
||||
'SummitTrackService.addTrackExtraQuestion.TrackNotFound' => 'track :track_id not found',
|
||||
'SummitTrackService.addTrackExtraQuestion.QuestionNotFound' => 'question :question_id not found',
|
||||
'SummitTrackService.removeTrackExtraQuestion.TrackNotFound' => 'track :track_id not found',
|
||||
'SummitTrackService.removeTrackExtraQuestion.QuestionNotFound' => 'question :question_id not found',
|
||||
];
|
|
@ -158,6 +158,54 @@ final class OAuth2TrackQuestionsTemplateTest
|
|||
return $track_question_template;
|
||||
}
|
||||
|
||||
public function testAddTrackExtraQuestion(){
|
||||
$new_track_extra_question = $this->testAddTrackQuestionTemplate();
|
||||
|
||||
$params = [
|
||||
'summit_id' => 25,
|
||||
'track_id' => 246,
|
||||
'question_id' => $new_track_extra_question->id,
|
||||
];
|
||||
|
||||
$headers = ["HTTP_Authorization" => " Bearer " . $this->access_token];
|
||||
$response = $this->action(
|
||||
"PUT",
|
||||
"OAuth2SummitTracksApiController@addTrackExtraQuestion",
|
||||
$params,
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
$headers
|
||||
);
|
||||
|
||||
$content = $response->getContent();
|
||||
$this->assertResponseStatus(201);
|
||||
return $new_track_extra_question;
|
||||
}
|
||||
|
||||
public function testRemoveTrackExtraQuestion(){
|
||||
$new_track_extra_question = $this->testAddTrackExtraQuestion();
|
||||
|
||||
$params = [
|
||||
'summit_id' => 25,
|
||||
'track_id' => 246,
|
||||
'question_id' => $new_track_extra_question->id,
|
||||
];
|
||||
|
||||
$headers = ["HTTP_Authorization" => " Bearer " . $this->access_token];
|
||||
$response = $this->action(
|
||||
"DELETE",
|
||||
"OAuth2SummitTracksApiController@removeTrackExtraQuestion",
|
||||
$params,
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
$headers
|
||||
);
|
||||
|
||||
$content = $response->getContent();
|
||||
$this->assertResponseStatus(204);
|
||||
}
|
||||
|
||||
public function testDeleteTrackQuestionTemplate(){
|
||||
$new_track_question_template = $this->testAddTrackQuestionTemplate();
|
||||
|
|
Loading…
Reference in New Issue