It is a demo online store that contains data in Firebase and uses
frontend programming (like product admin features)
backend Node.js programming (like online store features
Firebase Authentication to manage users
Firestore/Storage to store persistent data
So the following requirements are to be completed:
1. ShoppingCart contents stored directly in the Firestore at each shopping activity (picking an item, changing quantity, etc).
Do not utilize "session" to temporarily store the ShoppingCart contents. Note: If ShoppingCart utilizes session , when the user signs out, the contents of the ShoppingCart are lost if not checked out.
A Firestore document for the current ShoppingCart should be maintained for each user
If a user does not check out, the contents of the ShoppingCart must be retained even after the user signs out. When the user returns, the user gets notified of the leftover items in the ShoppingCart.
2. Pagination of products display for regular users to do shopping (not on product admin page)
Display 10 products at a time using pagination
Pagination must be implemented using firebase indexing and query as. Just edit the way it has been done. That is, you should only read 10 products from the Firestore at a time.
3. Email the invoice at check out and verify user email at sign up
At the time of checkout, email the invoice (cool looking one) to the user.
To this end, the user's email needs to be verified when the user signs up.
4. Product quantity in-stock
Products are displayed with the quantity in-stock. If the quantity is zero (0), "Out of stock" is displayed and "Add to ShoppingCart" button is disabled.
Users cannot add a product to the ShoppingCart if the product is out-of-stock.
product admin enters/updates the number of products in-stock
At the time of Checkout, you must verify the quantity in stock again because some other users may have checked out already, resulting in out-of-stock or insufficient quantity in-stock.
As users check out products successfully, the in-stock quantity is updated accordingly.