Reputation: 80
I am building a mini-swiggy application for selling pizza only with basic functionalities. The basic app is available here. This app doesn't have a login/register feature which I want to add to this app. I want to learn session storage while implementing this.
My question is:
should I make an API call for every time the user clicks on the add button, and update the cart at the database? (Currently being handled by react context API using local storage, there is no database as such for now. On placing the order I am simply flushing the local storage).
Now the database is required for features
In could just keep using local storage for updating the carts and only make an API call when the user places an order. And I can flush the cart from local storage once the order is placed.(This is I feel is more optimal since it will be better for performance and reduce the server load as well.)
Can all this be achieved without using redux?
Kindly help, considering I want to make it an app with best practices, Also if you have some good resources please share, I am kinda newbie here.
In case you could think of any other features please let me know :)
Upvotes: 2
Views: 3830
Reputation: 546
to begin with, I want to say I really liked your CSS :).
You don't have to use a database or redux for making a cart system, but as you can guess they have good opportunities.
DATABASE ADVANTAGES:
DATABASE DISADVANTAGES:
REDUX ADVANTAGES
REDUX DISADVANTAGES
LOCALSTORAGE ADVANTAGES
LOCALSTORAGE DISADVANTAGES
I didn't separate session storage because it's the same as local storage. The only difference is session storage is per-tab.
In my opinion, you should use a database. I know it's a basic app but you can learn a lot of things by doing it this way.
And these are my recommendations:
Upvotes: 3
Reputation: 1374
Very interesting question, I will answer only one part of it, otherwise it will get too long to read :)
Whether you need to make an API call to persist the cart server-side or just do it only once the order has been placed is a question regarding the business logic of your app itself.
Ask a question, "Do I want my users to be able to add items to the cart and watch/update/edit its' content even if they log in from a different machine/browser?"
If the answer is yes then for sure you have to synchronize your cart with the server so it can be consistent always. For this purpose I would suggest having sort of a queue, which will have the last version of the locally modified cart, once the user did no action for 2000ms to your cart, you can safely make an API call and persist the information of the cart in your DB.
This will reduce the load to your server, because people can increment the number of items you have in the cart by clicking 20 times on the add
button, in this case, instead of sending 20 requests to the server one at a time, it simply delays the process of persistent the cart, until the user stops interacting with your app for some X amount of milliseconds.
Upvotes: 2
Reputation: 523
Upvotes: 2
Reputation: 1214
I suggest using NextAuth for session management and authentication with combination of Strapi CMS it will be strong and easy for your project.
Upvotes: 1