added update attendee endpoint
PUT /api/v1/summits/{id}/attendees/{attendee_id} Change-Id: I1d0da88ee115dab7b850af7965fadf8b37e34870
This commit is contained in:
parent
4027478d40
commit
ea822c5d4f
@ -509,4 +509,58 @@ final class OAuth2SummitAttendeesApiController extends OAuth2ProtectedController
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $summit_id
|
||||
* @param int $attendee_id
|
||||
* @return mixed
|
||||
*/
|
||||
public function updateAttendee($summit_id, $attendee_id){
|
||||
try {
|
||||
if(!Request::isJson()) return $this->error403();
|
||||
$data = Input::json();
|
||||
|
||||
$summit = SummitFinderStrategyFactory::build($this->repository, $this->resource_server_context)->find($summit_id);
|
||||
if (is_null($summit)) return $this->error404();
|
||||
|
||||
$attendee = $this->attendee_repository->getById($attendee_id);
|
||||
if(is_null($attendee)) return $this->error404();
|
||||
|
||||
$rules = [
|
||||
'member_id' => 'required|integer',
|
||||
'share_contact_info' => 'sometimes|boolean',
|
||||
'summit_hall_checked_in' => 'sometimes|boolean',
|
||||
'summit_hall_checked_in_date' => 'sometimes|date_format:U',
|
||||
];
|
||||
|
||||
// Creates a Validator instance and validates the data.
|
||||
$validation = Validator::make($data->all(), $rules);
|
||||
|
||||
if ($validation->fails()) {
|
||||
$messages = $validation->messages()->toArray();
|
||||
|
||||
return $this->error412
|
||||
(
|
||||
$messages
|
||||
);
|
||||
}
|
||||
|
||||
$attendee = $this->attendee_service->updateAttendee($summit, $attendee_id, $data->all());
|
||||
|
||||
return $this->updated(SerializerRegistry::getInstance()->getSerializer($attendee)->serialize());
|
||||
}
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -159,6 +159,7 @@ Route::group([
|
||||
Route::group(array('prefix' => '{attendee_id}'), function () {
|
||||
|
||||
Route::get('', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2SummitAttendeesApiController@getAttendee']);
|
||||
Route::put('', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2SummitAttendeesApiController@updateAttendee']);
|
||||
Route::delete('', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2SummitAttendeesApiController@deleteAttendee']);
|
||||
Route::group(array('prefix' => 'schedule'), function ()
|
||||
{
|
||||
|
@ -13,7 +13,6 @@
|
||||
**/
|
||||
use models\utils\SilverstripeBaseModel;
|
||||
use Doctrine\ORM\Mapping AS ORM;
|
||||
|
||||
/**
|
||||
* @ORM\Entity
|
||||
* @ORM\Table(name="SummitAttendeeTicket")
|
||||
@ -23,6 +22,44 @@ use Doctrine\ORM\Mapping AS ORM;
|
||||
*/
|
||||
class SummitAttendeeTicket extends SilverstripeBaseModel
|
||||
{
|
||||
/**
|
||||
* @ORM\Column(name="ExternalOrderId", type="string")
|
||||
* @var string
|
||||
*/
|
||||
private $external_order_id;
|
||||
|
||||
/**
|
||||
* @ORM\Column(name="ExternalAttendeeId", type="string")
|
||||
* @var
|
||||
*/
|
||||
private $external_attendee_id;
|
||||
|
||||
/**
|
||||
* @ORM\Column(name="TicketBoughtDate", type="datetime")
|
||||
* @var \DateTime
|
||||
*/
|
||||
private $bought_date;
|
||||
|
||||
/**
|
||||
* @ORM\Column(name="TicketChangedDate", type="datetime")
|
||||
* @var \DateTime
|
||||
*/
|
||||
private $changed_date;
|
||||
|
||||
/**
|
||||
* @ORM\ManyToOne(targetEntity="SummitTicketType", fetch="EAGER")
|
||||
* @ORM\JoinColumn(name="TicketTypeID", referencedColumnName="ID")
|
||||
* @var SummitTicketType
|
||||
*/
|
||||
private $ticket_type;
|
||||
|
||||
/**
|
||||
* @ORM\ManyToOne(targetEntity="SummitAttendee", inversedBy="tickets")
|
||||
* @ORM\JoinColumn(name="OwnerID", referencedColumnName="ID")
|
||||
* @var SummitAttendee
|
||||
*/
|
||||
private $owner;
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
@ -136,44 +173,4 @@ class SummitAttendeeTicket extends SilverstripeBaseModel
|
||||
{
|
||||
$this->owner = $owner;
|
||||
}
|
||||
|
||||
/**
|
||||
* @ORM\Column(name="ExternalOrderId", type="string")
|
||||
* @var string
|
||||
*/
|
||||
private $external_order_id;
|
||||
|
||||
/**
|
||||
* @ORM\Column(name="ExternalAttendeeId", type="string")
|
||||
* @var
|
||||
*/
|
||||
private $external_attendee_id;
|
||||
|
||||
/**
|
||||
* @ORM\Column(name="TicketBoughtDate", type="datetime")
|
||||
* @var \DateTime
|
||||
*/
|
||||
private $bought_date;
|
||||
|
||||
/**
|
||||
* @ORM\Column(name="TicketChangedDate", type="datetime")
|
||||
* @var \DateTime
|
||||
*/
|
||||
private $changed_date;
|
||||
|
||||
|
||||
/**
|
||||
* @ORM\ManyToOne(targetEntity="SummitTicketType", fetch="EAGER")
|
||||
* @ORM\JoinColumn(name="TicketTypeID", referencedColumnName="ID")
|
||||
* @var SummitTicketType
|
||||
*/
|
||||
private $ticket_type;
|
||||
|
||||
/**
|
||||
* @ORM\ManyToOne(targetEntity="SummitAttendee", inversedBy="tickets")
|
||||
* @ORM\JoinColumn(name="OwnerID", referencedColumnName="ID")
|
||||
* @var SummitAttendee
|
||||
*/
|
||||
private $owner;
|
||||
|
||||
}
|
@ -27,8 +27,17 @@ final class SummitAttendeeFactory
|
||||
* @return SummitAttendee
|
||||
*/
|
||||
public static function build(Summit $summit, Member $member, array $data){
|
||||
$attendee = new SummitAttendee();
|
||||
return self::updateMainData($summit, new SummitAttendee, $member, $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Summit $summit
|
||||
* @param SummitAttendee $attendee
|
||||
* @param Member $member
|
||||
* @param array $data
|
||||
* @return SummitAttendee
|
||||
*/
|
||||
public static function updateMainData(Summit $summit, SummitAttendee $attendee, Member $member, array $data){
|
||||
$attendee->setMember($member);
|
||||
$attendee->setSummit($summit);
|
||||
|
||||
|
@ -96,13 +96,46 @@ final class AttendeeService implements IAttendeeService
|
||||
{
|
||||
return $this->tx_service->transaction(function() use($summit, $attendee_id){
|
||||
|
||||
|
||||
$attendee = $summit->getAttendeeById($attendee_id);
|
||||
if(is_null($attendee))
|
||||
throw new EntityNotFoundException();
|
||||
|
||||
$this->attendee_repository->delete($attendee);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Summit $summit
|
||||
* @param int $attendee_id
|
||||
* @param array $data
|
||||
* @return SummitAttendee
|
||||
* @throws ValidationException
|
||||
* @throws EntityNotFoundException
|
||||
*/
|
||||
public function updateAttendee(Summit $summit, $attendee_id, array $data)
|
||||
{
|
||||
return $this->tx_service->transaction(function() use($summit, $attendee_id, $data){
|
||||
|
||||
$attendee = $summit->getAttendeeById($attendee_id);
|
||||
if(is_null($attendee))
|
||||
throw new EntityNotFoundException(sprintf("attendee does not belongs to summit id %s", $summit->getId()));
|
||||
|
||||
if(!isset($data['member_id']))
|
||||
throw new ValidationException("member_id is required");
|
||||
|
||||
$member_id = intval($data['member_id']);
|
||||
$member = $this->member_repository->getById($member_id);
|
||||
|
||||
if(is_null($member))
|
||||
throw new EntityNotFoundException("member not found");
|
||||
|
||||
// check if attendee already exist for this summit
|
||||
|
||||
$old_attendee = $this->attendee_repository->getBySummitAndMember($summit, $member);
|
||||
if(!is_null($old_attendee) && $old_attendee->getId() != $attendee->getId())
|
||||
throw new ValidationException(sprintf("another attendee (%s) already exist for summit id %s and member id %s", $old_attendee->getId(), $summit->getId(), $member->getIdentifier()));
|
||||
|
||||
return SummitAttendeeFactory::updateMainData($summit, $attendee, $member , $data);
|
||||
|
||||
});
|
||||
}
|
||||
|
@ -25,6 +25,8 @@ interface IAttendeeService
|
||||
* @param Summit $summit
|
||||
* @param array $data
|
||||
* @return SummitAttendee
|
||||
* @throws ValidationException
|
||||
* @throws EntityNotFoundException
|
||||
*/
|
||||
public function addAttendee(Summit $summit, array $data);
|
||||
|
||||
@ -36,4 +38,14 @@ interface IAttendeeService
|
||||
* @throws EntityNotFoundException
|
||||
*/
|
||||
public function deleteAttendee(Summit $summit, $attendee_id);
|
||||
|
||||
/**
|
||||
* @param Summit $summit
|
||||
* @param int $attendee_id
|
||||
* @param array $data
|
||||
* @return SummitAttendee
|
||||
* @throws ValidationException
|
||||
* @throws EntityNotFoundException
|
||||
*/
|
||||
public function updateAttendee(Summit $summit, $attendee_id, array $data);
|
||||
}
|
@ -137,6 +137,14 @@ class ApiEndpointsSeeder extends Seeder
|
||||
sprintf(SummitScopes::WriteAttendeesData, $current_realm),
|
||||
],
|
||||
),
|
||||
array(
|
||||
'name' => 'update-attendee',
|
||||
'route' => '/api/v1/summits/{id}/attendees/{attendee_id}',
|
||||
'http_method' => 'PUT',
|
||||
'scopes' => [
|
||||
sprintf(SummitScopes::WriteAttendeesData, $current_realm),
|
||||
],
|
||||
),
|
||||
array(
|
||||
'name' => 'get-attendee-schedule',
|
||||
'route' => '/api/v1/summits/{id}/attendees/{attendee_id}/schedule',
|
||||
|
@ -74,11 +74,11 @@ class OAuth2AttendeesApiTest extends ProtectedApiTest
|
||||
$this->assertTrue(!is_null($attendee));
|
||||
}
|
||||
|
||||
public function testGetAttendeeByID(){
|
||||
public function testGetAttendeeByID($attendee_id = 12641){
|
||||
|
||||
$params = [
|
||||
'id' => 23,
|
||||
'attendee_id' => 12641,
|
||||
'attendee_id' => $attendee_id,
|
||||
'expand' => 'member,schedule,tickets,affiliations,groups'
|
||||
];
|
||||
|
||||
@ -101,6 +101,8 @@ class OAuth2AttendeesApiTest extends ProtectedApiTest
|
||||
$this->assertResponseStatus(200);
|
||||
$attendee = json_decode($content);
|
||||
$this->assertTrue(!is_null($attendee));
|
||||
|
||||
return $attendee;
|
||||
}
|
||||
|
||||
public function testGetAttendeeByOrderID(){
|
||||
@ -194,4 +196,40 @@ class OAuth2AttendeesApiTest extends ProtectedApiTest
|
||||
$content = $response->getContent();
|
||||
$this->assertResponseStatus(204);
|
||||
}
|
||||
|
||||
public function testUpdateAttendee(){
|
||||
$attendee = $this->testGetAttendeeByID(12642);
|
||||
|
||||
$params = [
|
||||
'id' => 23,
|
||||
'attendee_id' => $attendee->id
|
||||
];
|
||||
|
||||
$data = [
|
||||
'member_id' => $attendee->member->id,
|
||||
'share_contact_info' => true
|
||||
];
|
||||
|
||||
$headers = [
|
||||
"HTTP_Authorization" => " Bearer " . $this->access_token,
|
||||
"CONTENT_TYPE" => "application/json"
|
||||
];
|
||||
|
||||
$response = $this->action(
|
||||
"PUT",
|
||||
"OAuth2SummitAttendeesApiController@updateAttendee",
|
||||
$params,
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
$headers,
|
||||
json_encode($data)
|
||||
);
|
||||
|
||||
$content = $response->getContent();
|
||||
$this->assertResponseStatus(204);
|
||||
$attendee = json_decode($content);
|
||||
$this->assertTrue(!is_null($attendee));
|
||||
return $attendee;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user