This episode is for members only

Sign up to access "Build an E-Commerce Platform" right now.

Get started
Already a member? Sign in to continue
Playing
52. Checking for quantity changes

Episodes

0%
Your progress
  • Total: 8h 42m
  • Played: 0m
  • Remaining: 8h 42m
Join or sign in to track your progress
01. Introduction and demo
9m 42s
0%
02. Installing Laravel, Breeze and Livewire
4m 47s
0%
03. Creating categories
9m 4s
0%
04. Recursively displaying categories
8m 21s
0%
05. Product model and migration
2m 50s
0%
06. Showing a product
7m 50s
0%
07. Product variation setup
10m 26s
0%
08. Creating the product selector
10m 34s
0%
09. Loading child variation dropdowns
4m 28s
0%
10. Faking adding the final variation
9m 33s
0%
11. Setting up product stock
4m 34s
0%
12. Calculating variation stock levels
9m 1s
0%
13. Adding product images with MediaLibrary
8m 50s
0%
14. Creating the product gallery
7m 28s
0%
15. Providing a fallback image
2m 56s
0%
16. Adding media to product variations
3m 37s
0%
17. Creating the cart model
3m 37s
0%
18. Registering the cart service
6m 34s
0%
19. Creating a cart session
11m 4s
0%
20. Showing the cart in the navigation
9m 19s
0%
21. Caching the cart instance
3m 2s
0%
22. Adding items to the cart
14m 1s
0%
23. Creating the notification component
8m 5s
0%
24. Showing the user's cart
6m 50s
0%
25. Outputting cart items
4m 50s
0%
26. Showing variation specifics
8m 8s
0%
27. Updating item quantity
8m 2s
0%
28. Removing an item from the cart
6m 1s
0%
29. Calculating the cart summary
8m 7s
0%
30. Showing the category products page
5m 1s
0%
31. Indexing products in Meilisearch
8m 32s
0%
32. Hooking up products to categories
4m 15s
0%
33. Building the product browser
13m 32s
0%
34. Showing child categories
1m 51s
0%
35. Indexing product variations for filtering
8m
0%
36. Outputting variations for filtering
12m 52s
0%
37. Hooking up product filters with Livewire
7m 48s
0%
38. Filtering products
12m 24s
0%
39. Filtering by price
9m 50s
0%
40. Adding global navigation search
7m 50s
0%
41. Handling products that are not live
3m 22s
0%
42. Price range category fix
1m 18s
0%
43. Scaffolding the checkout page
8m 6s
0%
44. Listing shipping options
9m 3s
0%
45. Calculating the cart totals
2m 52s
0%
46. Validating the account form
9m 10s
0%
47. Validating the shipping form
5m 47s
0%
48. Saving the shipping address
8m 4s
0%
49. Selecting a saved shipping address
6m 39s
0%
50. Fix shipping address error for non authenticated users
1m 7s
0%
51. Redirecting if the cart is empty
2m 42s
0%
52. Checking for quantity changes
7m 11s
0%
53. Syncing if quantities have changed
11m 59s
0%
54. Flashing a message when quantities have changed
5m 48s
0%
55. Setting up for orders
5m 17s
0%
56. Creating an order
13m 24s
0%
57. Attaching variations to order
6m 13s
0%
58. Reducing stock after ordering
2m 56s
0%
59. Meilisearch filter query fix
1m 33s
0%
60. Showing the order confirmation page
7m 39s
0%
61. Attaching orders for registering guest users
5m 17s
0%
62. Scaffolding the orders page
5m 30s
0%
63. Filling in order variation details
5m 24s
0%
64. Returning the order status
4m 39s
0%
65. Detecting order status changes
10m 49s
0%
66. Sending the order status change email
5m 12s
0%
67. Sending an order confirmation email
2m 47s
0%
68. Handling deleted cart records
4m 44s
0%
69. Transferring the guest cart
2m 44s
0%
70. Creating a presenter for the order status
4m 31s
0%
71. Setting up Stripe
3m 43s
0%
72. Creating and updating a PaymentIntent
16m 21s
0%
73. The Stripe card form
3m 35s
0%
74. Validating before payment
5m 34s
0%
75. Submitting a payment
6m 40s
0%
76. Checking for a successful payment
5m 47s
0%
77. Handling Stripe client errors
3m 11s
0%
78. Entangling Stripe customer data
2m 18s
0%

Transcript

00:00
A really important part of an e-commerce cart and checkout is telling the user if the quantities that they have in their cart have changed.
00:10
So what we're going to do in this episode is just go ahead and add an item to our cart. We're going to see that in our cart. We're going to manually create a stock change to reduce the quantity. And then we should see an exception thrown if the quantity has changed.
00:27
In the next episode, we'll take that exception and we will handle syncing the quantities for multiple products just to make sure that the quantities are reduced to the amount we do have available. And this process will happen on the cart page that we can see here. It will happen on the checkout page, and it will also happen when we go through to process
00:46
the order as well. So if we order and someone has just ordered before us and reduced that quantity and that brings our quantity down for a particular product, we're going to let the user know before we process the payment. OK, let's go ahead and add a product in.
01:01
We can just work with one product for this. So let's go ahead and just choose our Nike Air Force 1s in black in size 8. Now, I'm going to bump this quantity up to, let's say, 10. So we'll go for the full 10 pairs of this.
01:15
And if we come over to our database here under stocks, we know that's the case because for this one, we have got 10. Let's remove the others just so we're a little bit clearer, and we should be good. OK, so what we're going to do is reduce this by 5.
01:32
So this is what happens when we create an order and we purchase five of these. Now, at the moment, when we refresh this, we kind of see a sort of not an error but a problem here because we have technically a 10 value for this quantity. But remember, we reduce this quantity dropdown by the amount of stock that we have.
01:53
So what we want to do at this point ideally is not do this because it kind of looks like we have one in our cart when actually, if we come over to our cart variation here, we still have 10. That's not what we want to happen.
02:04
We want this to reduce down to the maximum that we actually have available. So let's start by doing this over on our cart index controller that we are currently looking at here. Ideally, what we want to do is refresh the page and then verify these quantities.
02:19
So we're going to go ahead and bring in our cart interface in here, and we're going to call a method on our cart to verify the available quantities. So let's say verify available quantities. Let's go ahead and create this over on cart.php.
02:38
So let's do this just, well, we could do it anywhere. Let's just do it down here. So verify available quantities. And for now, let's just die dump just to make sure that this is working nicely.
02:51
There we go. So that's at the point that we want to trigger and check that we have available quantities. And if we don't for any of the products in our cart, we want to throw an exception. So we want to iterate and do this for every single product.
03:05
So let's go ahead and grab the cart instance. Let's grab the variations or we could use contents. And let's go over each one here, create our closure in here. Now, this will only detect and throw an exception for the first one that we find that has no
03:21
quantity available or less quantity available. But that's fine, because when we bring in the sync method, that's going to go ahead and sync this and reduce all of the items in our cart based on any stock. So if we have two products in our cart that both have a quantity of 10 and both are reduced
03:38
by five, these will both be reduced by five. What we won't be able to do is tell the user exactly the products that have been reduced, but we can always refact that later if we have time. OK, so we're going through each of the products in our cart.
03:54
What do we want to check in here? Let's think about this in plain English. We want to check that for each of these variations that we get through in this iteration pivot. So the pivot is going to be, say, 10.
04:05
We want to check if that is greater than the available stock for that variation. And we've got that variation here, so we can access the stock's relationship. So let's put this into an if statement. And we're just going to say variation pivot quantity.
04:22
So that's, in our case, going to be 10, because we have 10 of that in our cart. And we're going to access the stock's relationship on that variation. And we're going to sum up the amount. So we could technically, if we just come over to the variation model,
04:39
we could check if, let's have a look, stock count. So we could use this stock count. But remember, that uses the descendants themselves. So I think just doing a sum on the amount for this is going to be absolutely fine for now.
04:53
And then let's throw an exception in here and just say stock reduced. We'll be changing this to a custom exception in a moment. So let's make sure we pull that namespace in. OK, so now we should expect to see this.
05:07
And let's make sure we throw a new exception. OK, let's go over and give that a refresh. And there we go. We get a stock produced exception.
05:14
Because, of course, the stock that we've got in here, which is 10, is now 5, because we produced that by 5. Now let's create a custom exception for this so we know exactly what we're looking for. So I'm just going to create an exceptions folder out in our cart here.
05:29
And let's go ahead and create a quantity no longer available exception. And let's just scaffold this out really quickly. So the namespace here is going to be app cart exceptions. We could, of course, create a new exception by the command line with artisan.
05:50
But we'll just kind of keep this as it is for now. And quantity no longer available exception. And, of course, that's going to extend PHP's base exception, which we can go ahead and put in here.
06:07
Now we don't need to do anything in here. Technically, what you could do is pass the product in so you could show more information. But let's kind of keep this as it is. In fact, I'm going to get rid of the exception suffix on this,
06:20
because I don't really think it makes too much sense. So that should be fine. OK, so now we can go ahead and throw a quantity no longer available. And we can pick that up where we need it.
06:30
So if we just come over and give that a refresh, we get exactly the same thing here with the stock produced. But now we have something a little bit more specific to pick up. So over in our cart index controller, what we're going to do is try
06:43
and we're going to verify those available quantities. And then we're going to catch a quantity no longer available exception. And let's make sure we pull that in. And then here, we're going to go ahead and sync the products that we have in our cart
06:58
with the max quantities that are available. So that is where we've got to. The process of verifying the available quantities is done. We just need to focus on syncing these, which we're going to be doing in the next episode.
78 episodes8 hrs 42 mins

Overview

Build a robust e-commerce platform with a Laravel and Livewire. Features products with unlimited and flexible variations, a product browser with filters and price range slider, global product search, guest checkout, shipping and payment implementation, order status tracking and more.

Alex Garrett-Smith
Alex Garrett-Smith
Hey, I'm the founder of Codecourse!

Comments

No comments, yet. Be the first to leave a comment.