- view the full list of products (the product catalog), so that I can see everything that's available
- refine product listings by category, so that I can narrow down my choices to see only the types of items I'm interested in
- search product listings, so that I can find specific products I want by name
- view the details for an individual product (including product descriptions, photos and reviews), so that I can determine whether that particular item fits my needs
- Note: Reviews are not displayed.
- add items to my cart from the product listing or product detail pages, so that I can purchase them later
- remove items from my cart, in case I decide I don't want an item anymore
- edit/remove quantities of items in the cart, in case I decide I want more or less of a particular item
- refresh the page and have the cart persist, so that I don't lose my work (you may use sessionStorage, localStorage, cookies or JWT for this)
- be able to log in to my account and continue editing that same cart, so that I don't lose any progress I made before I logged in
- purchase items in the cart, so that I can get the items I want
- specify a shipping address and email address when I checkout, so that the items can arrive at the right place
- receive a confirmation email after I checkout, so that I know my order is being looked at
- receive a notification email when the order ships, and then when the order is delivered, so that I can stay up to date on when my order will arrive
- be able to create an account, so that I can perform activities like leaving reviews
- be able to login with either Google or Facebook, so that I don't need to remember a new password to have an account
- be able to log out, so that someone else can't just come along and use my account
- view my list of previous orders, so that I can find and individual order I made in the past and review it
- view the details of a past order, including: - [x] Current order status - [ ] Items with quantity and subtotal
- Note: Missing subtotal - [x] Link to the original product detail page - [/] Date/time order was created
- Note: Missing time - [x] so that I can remember exactly what I ordered and when
- be able to leave reviews for products (including text and a 5-star rating), so that I can share my experiences with other visitors
- [/] create and edit products with name, description, price and one or more photos, so that visitors can see the latest info on what we have to offer - Note: Products can only have one photo.
- create categories for items, so that users can continue to have useful filters as our inventory grows in variety
- add/remove categories from items, so that users will see them when they refine their searches
- Acceptance Criteria: items must have multiple categories
- manage the availability of a product, so that users will know whether or not they can purchase that product
- Acceptance Criteria: If a product is no longer available, users will not see it while browsing, but they can view the product detail page if they've ordered it previously or have a direct link. On that product detail page, it should say "Currently Unavailable"
- view a list of all orders, so that I can find specific orders to review
- filter orders by status (Created, Processing, Cancelled, Completed), so that I can more easily find the orders I'm interested in
- view details of a specific order, so that I can review it and update its status
- change the status of the order (Created -> Processing, Processing -> Cancelled || Completed), so that others will know what stage of the process the order is in
- promote other user accounts to have admin status, so that new administrators can have the same privileges I have
- delete a user, so users who should not be able to log in anymore cannot
- trigger password reset for a user (that is, the next time they successfully log in with their old password, they are prompted for a new one), so that I can be proactive in getting users to change their passwords after a period of time
- Must have title, description, price, and inventory quantity
- Must belong to at least one category
- If there is no photo, there must be a placeholder photo used
- Users must have a valid email address
- Users email must be unique
- Orders must belong to a user OR guest session (authenticated vs unauthenticated)
- Orders must contain line items that capture the price, current product ID and quantity
- If a user completes an order, that order should keep the price of the item at the time when they checked out even if the price of the product later changes
- All reviews must belong to a product
- All reviews must belong to a user
- All reviews must be at least X characters
- Customers can browse & filter by category
- Admins can add & edit products
- Customers can do full text search on the catalog (Extra Credit)
- Catalog is paginated (Extra Credit)
- Customers have a cart they can put stuff in while they shop
- Customers can see their order history
- Customers always have their cart, on any device (Extra Credit)
- Customers can checkout, using a real payment api (probably Stripe)
- Admins can see pending orders that need to be shipped
- Customers get email confirmations (Extra Credit)