Added endpoint update ticket type

PUT /api/v1/summits/{id}/ticket-types/{ticket_type_id}

Payload

* name (sometimes|string)
* external_id (sometimes|string|max:255
* description (sometimes|string)

Change-Id: Id9736e2151a8c69441e29e4167f3d1a83ecf1434
This commit is contained in:
Sebastian Marcet
2018-03-23 14:56:24 -03:00
parent 3e790ad983
commit 98c4500d48
8 changed files with 191 additions and 3 deletions

View File

@@ -29,4 +29,14 @@ interface ISummitTicketTypeService
* @throws ValidationException
*/
public function addTicketType(Summit $summit, array $data);
/**
* @param Summit $summit
* @param int $ticket_type_id
* @param array $data
* @return SummitTicketType
* @throws EntityNotFoundException
* @throws ValidationException
*/
public function updateTicketType(Summit $summit, $ticket_type_id, array $data);
}

View File

@@ -95,4 +95,73 @@ final class SummitTicketTypeService
return $ticket_type;
});
}
/**
* @param Summit $summit
* @param int $ticket_type_id
* @param array $data
* @return SummitTicketType
* @throws EntityNotFoundException
* @throws ValidationException
*/
public function updateTicketType(Summit $summit, $ticket_type_id, array $data)
{
return $this->tx_service->transaction(function() use ($summit, $ticket_type_id, $data){
if(isset($data['name'])) {
$former_ticket_type = $summit->getTicketTypeByName(trim($data['name']));
if (!is_null($former_ticket_type) && $former_ticket_type->getId() != $ticket_type_id) {
throw new ValidationException
(
trans
(
'validation_errors.SummitTicketTypeService.updateTicketType.NameAlreadyExists'
),
[
'name' => trim($data['name']),
'summit_id' => $summit->getId()
]
);
}
}
if(isset($data['external_id'])) {
$former_ticket_type = $summit->getTicketTypeByExternalId(trim($data['external_id']));
if (!is_null($former_ticket_type) && $former_ticket_type->getId() != $ticket_type_id) {
throw new ValidationException
(
trans
(
'validation_errors.SummitTicketTypeService.updateTicketType.ExternalIdAlreadyExists'
),
[
'external_id' => trim($data['external_id']),
'summit_id' => $summit->getId()
]
);
}
}
$ticket_type = $summit->getTicketTypeById($ticket_type_id);
if(is_null($ticket_type)){
throw new EntityNotFoundException
(
trans
(
'not_found_errors.SummitTicketTypeService.updateTicketType.TicketTypeNotFound',
[
'ticket_type_id' => $ticket_type_id,
'summit_id' => $summit->getId()
]
)
);
}
$ticket_type = SummitTicketTypeFactory::populate($ticket_type, $data);
return $ticket_type;
});
}
}