added endpoint to copy tracks from summit to another
POST /api/v1/summits/{id}/tracks/copy/{to_summit_id} Change-Id: Icbfe4c5826cd939181674e4efd00236aafccf4b1
This commit is contained in:
parent
7c502e93ef
commit
168b450002
|
@ -29,6 +29,8 @@ use utils\FilterParser;
|
|||
use utils\OrderParser;
|
||||
use utils\PagingInfo;
|
||||
use Exception;
|
||||
use utils\PagingResponse;
|
||||
|
||||
/**
|
||||
* Class OAuth2SummitTracksApiController
|
||||
* @package App\Http\Controllers
|
||||
|
@ -338,6 +340,48 @@ final class OAuth2SummitTracksApiController extends OAuth2ProtectedController
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $summit_id
|
||||
* @param $to_summit_id
|
||||
* @return mixed
|
||||
*/
|
||||
public function copyTracksToSummit($summit_id, $to_summit_id){
|
||||
try {
|
||||
|
||||
$from_summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id);
|
||||
if (is_null($from_summit)) return $this->error404();
|
||||
|
||||
$to_summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($to_summit_id);
|
||||
if (is_null($to_summit)) return $this->error404();
|
||||
|
||||
$tracks = $this->track_service->copyTracks($from_summit, $to_summit);
|
||||
|
||||
$response = new PagingResponse
|
||||
(
|
||||
count($tracks),
|
||||
count($tracks),
|
||||
1,
|
||||
1,
|
||||
$tracks
|
||||
);
|
||||
|
||||
return $this->created($response->toArray());
|
||||
}
|
||||
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
|
||||
|
|
|
@ -487,6 +487,7 @@ Route::group([
|
|||
Route::get('', 'OAuth2SummitTracksApiController@getAllBySummit');
|
||||
Route::get('csv', 'OAuth2SummitTracksApiController@getAllBySummitCSV');
|
||||
Route::post('', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2SummitTracksApiController@addTrackBySummit']);
|
||||
Route::post('copy/{to_summit_id}', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2SummitTracksApiController@copyTracksToSummit']);
|
||||
Route::group(['prefix' => '{track_id}'], function () {
|
||||
Route::get('', 'OAuth2SummitTracksApiController@getTrackBySummit');
|
||||
Route::put('', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2SummitTracksApiController@updateTrackBySummit']);
|
||||
|
|
|
@ -954,7 +954,7 @@ class Summit extends SilverstripeBaseModel
|
|||
public function getPresentationCategoryByTitle($category_title)
|
||||
{
|
||||
$criteria = Criteria::create();
|
||||
$criteria->where(Criteria::expr()->eq('title', intval($category_title)));
|
||||
$criteria->where(Criteria::expr()->eq('title', trim($category_title)));
|
||||
$category = $this->presentation_categories->matching($criteria)->first();
|
||||
return $category === false ? null : $category;
|
||||
}
|
||||
|
|
|
@ -49,4 +49,13 @@ interface ISummitTrackService
|
|||
*/
|
||||
public function deleteTrack(Summit $summit, $track_id);
|
||||
|
||||
/**
|
||||
* @param Summit $from_summit
|
||||
* @param Summit $to_summit
|
||||
* @return PresentationCategory[]
|
||||
* @throws EntityNotFoundException
|
||||
* @throws ValidationException
|
||||
*/
|
||||
public function copyTracks(Summit $from_summit, Summit $to_summit);
|
||||
|
||||
}
|
|
@ -111,7 +111,6 @@ final class SummitTrackService
|
|||
throw new ValidationException(sprintf("track id %s already has title %s assigned on summit id %s", $former_track->getId(), $data['title'], $summit->getId()));
|
||||
}
|
||||
|
||||
|
||||
$track = PresentationCategoryFactory::populate($track, $data);
|
||||
|
||||
Event::fire(new TrackUpdated($track->getSummitId(), $track->getId()));
|
||||
|
@ -154,4 +153,61 @@ final class SummitTrackService
|
|||
$this->repository->delete($track);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Summit $from_summit
|
||||
* @param Summit $to_summit
|
||||
* @return PresentationCategory[]
|
||||
* @throws EntityNotFoundException
|
||||
* @throws ValidationException
|
||||
*/
|
||||
public function copyTracks(Summit $from_summit, Summit $to_summit)
|
||||
{
|
||||
$added_tracks = $this->tx_service->transaction(function () use ($from_summit, $to_summit) {
|
||||
|
||||
if($from_summit->getId() == $to_summit->getId()){
|
||||
throw new ValidationException
|
||||
(
|
||||
trans
|
||||
(
|
||||
'validation_errors.SummitTrackService.copyTracks.SameSummit'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
$added_tracks = [];
|
||||
foreach($from_summit->getPresentationCategories() as $track_2_copy){
|
||||
$former_track = $to_summit->getPresentationCategoryByTitle($track_2_copy->getTitle());
|
||||
if(!is_null($former_track)) continue;
|
||||
|
||||
$former_track = $to_summit->getPresentationCategoryByCode($track_2_copy->getCode());
|
||||
if(!is_null($former_track)) continue;
|
||||
|
||||
$data = [
|
||||
'title' => $track_2_copy->getTitle(),
|
||||
'code' => $track_2_copy->getCode(),
|
||||
'description' => $track_2_copy->getDescription(),
|
||||
'session_count' => $track_2_copy->getSessionCount(),
|
||||
'alternate_count' => $track_2_copy->getAlternateCount(),
|
||||
'lightning_count' => $track_2_copy->getLightningCount(),
|
||||
'lightning_alternate_count' => $track_2_copy->getLightningAlternateCount(),
|
||||
'voting_visible' => $track_2_copy->isVotingVisible(),
|
||||
'chair_visible' => $track_2_copy->isChairVisible(),
|
||||
];
|
||||
|
||||
$new_track = PresentationCategoryFactory::build($to_summit, $data);
|
||||
|
||||
$to_summit->addPresentationCategory($new_track);
|
||||
$added_tracks[] = $new_track;
|
||||
}
|
||||
|
||||
return $added_tracks;
|
||||
});
|
||||
|
||||
foreach ($added_tracks as $track){
|
||||
Event::fire(new TrackInserted($track->getSummitId(), $track->getId()));
|
||||
}
|
||||
|
||||
return $added_tracks;
|
||||
}
|
||||
}
|
|
@ -1110,6 +1110,15 @@ class ApiEndpointsSeeder extends Seeder
|
|||
sprintf(SummitScopes::ReadAllSummitData, $current_realm)
|
||||
],
|
||||
],
|
||||
[
|
||||
'name' => 'copy-tracks-to-summit',
|
||||
'route' => '/api/v1/summits/{id}/tracks/copy/{to_summit_id}',
|
||||
'http_method' => 'POST',
|
||||
'scopes' => [
|
||||
sprintf(SummitScopes::WriteTracksData, $current_realm),
|
||||
sprintf(SummitScopes::WriteSummitData, $current_realm)
|
||||
],
|
||||
],
|
||||
[
|
||||
'name' => 'add-track',
|
||||
'route' => '/api/v1/summits/{id}/tracks',
|
||||
|
|
|
@ -68,5 +68,6 @@ return [
|
|||
// SummitService
|
||||
'SummitService.AddSummit.NameAlreadyExists' => 'name :name its already being assigned to another summit',
|
||||
'SummitService.updateSummit.NameAlreadyExists'=> 'name :name its already being assigned to another summit',
|
||||
'SummitService.updateSummit.SummitAlreadyActive' => 'summit :active_summit_id is already activated please deactivate it to set current summit as active'
|
||||
'SummitService.updateSummit.SummitAlreadyActive' => 'summit :active_summit_id is already activated please deactivate it to set current summit as active',
|
||||
'SummitTrackService.copyTracks.SameSummit' => 'from summit is equal a to summit.',
|
||||
];
|
|
@ -22,6 +22,7 @@ final class OAuth2TracksApiTest extends ProtectedApiTest
|
|||
* @return mixed
|
||||
*/
|
||||
public function testGetTracksByTitle($summit_id = 23){
|
||||
|
||||
$params = [
|
||||
|
||||
'id' => $summit_id,
|
||||
|
@ -261,4 +262,32 @@ final class OAuth2TracksApiTest extends ProtectedApiTest
|
|||
$content = $response->getContent();
|
||||
$this->assertResponseStatus(412);
|
||||
}
|
||||
|
||||
public function testCopyTracks($from_summit_id = 24, $to_summit_id = 25){
|
||||
|
||||
$params = [
|
||||
'id' => $from_summit_id,
|
||||
'to_summit_id' => $to_summit_id
|
||||
];
|
||||
|
||||
$headers = [
|
||||
"HTTP_Authorization" => " Bearer " . $this->access_token,
|
||||
"CONTENT_TYPE" => "application/json"
|
||||
];
|
||||
|
||||
$response = $this->action(
|
||||
"POST",
|
||||
"OAuth2SummitTracksApiController@copyTracksToSummit",
|
||||
$params,
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
$headers
|
||||
);
|
||||
|
||||
$content = $response->getContent();
|
||||
$this->assertResponseStatus(201);
|
||||
$added_tracks = json_decode($content);
|
||||
$this->assertTrue(!is_null($added_tracks));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue