From e0f49677d86b34493d937282c2b1adfbd856d3f5 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Thu, 17 Nov 2016 14:21:35 -0500 Subject: [PATCH] 5.2 - Removing the Need to Cancel Orders --- app/Concert.php | 17 ++++++++++++++--- .../Controllers/ConcertOrdersController.php | 9 +++++---- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/app/Concert.php b/app/Concert.php index 2c1181a..f7ed0f2 100644 --- a/app/Concert.php +++ b/app/Concert.php @@ -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) { diff --git a/app/Http/Controllers/ConcertOrdersController.php b/app/Http/Controllers/ConcertOrdersController.php index 306580d..5b34583 100644 --- a/app/Http/Controllers/ConcertOrdersController.php +++ b/app/Http/Controllers/ConcertOrdersController.php @@ -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);