5.2 - Removing the Need to Cancel Orders

This commit is contained in:
Adam Wathan
2016-11-17 14:21:35 -05:00
parent bb6944e63b
commit e0f49677d8
2 changed files with 19 additions and 7 deletions

View File

@@ -52,15 +52,26 @@ class Concert extends Model
public function orderTickets($email, $ticketQuantity)
{
$tickets = $this->tickets()->available()->take($ticketQuantity)->get();
$tickets = $this->findTickets($ticketQuantity);
return $this->createOrder($email, $tickets);
}
if ($tickets->count() < $ticketQuantity) {
public function findTickets($quantity)
{
$tickets = $this->tickets()->available()->take($quantity)->get();
if ($tickets->count() < $quantity) {
throw new NotEnoughTicketsException;
}
return $tickets;
}
public function createOrder($email, $tickets)
{
$order = $this->orders()->create([
'email' => $email,
'amount' => $ticketQuantity * $this->ticket_price,
'amount' => $tickets->count() * $this->ticket_price,
]);
foreach ($tickets as $ticket) {

View File

@@ -30,16 +30,17 @@ class ConcertOrdersController extends Controller
try {
// Find some tickets
// Charge the customer for the tickets
// Create an order for those tickets
$tickets = $concert->findTickets(request('ticket_quantity'));
$order = $concert->orderTickets(request('email'), request('ticket_quantity'));
// Charge the customer for the tickets
$this->paymentGateway->charge(request('ticket_quantity') * $concert->ticket_price, request('payment_token'));
// Create an order for those tickets
$order = $concert->createOrder(request('email'), $tickets);
return response()->json($order, 201);
} catch (PaymentFailedException $e) {
$order->cancel();
return response()->json([], 422);
} catch (NotEnoughTicketsException $e) {
return response()->json([], 422);