It's a multi-user e-commerce app to manage a grocery store, made using Flask framework and SQLite database. It can be used to search and query products and place orders by customers, manage product inventories and create/edit/delete different categories by the store manager(after approval from the Admin), and manage deliveries by the delivery executive. The developer can use the CRUD APIs for products and categories using their private API keys. Each folder has a README.md file except static and templates folders.
- 5 types of users: Customer, Admin, Store Manager, Delivery Executive, Developer
- CRUD APIs for Product and Category management(flask_restx) - You can play around with the API endpoints by pasting the contents of
application/APIdoc.yaml
file in Swagger Editor - RBAC for authentication and authorization of different user types using flask-login
- External APIs: Stripe for online payments, Twilio for OTPs
- Ability to search Products based on category, ratings, and various other product features
- Product recommendation systems for customers based on their previous orders and for showing similar products of a given product based on product description.
- Scheduled tasks for sending daily email reminders and monthly reports using flask-mail and Celery.
- using flask_caching for caching.
- Can search products based on category, ratings, and various other product features
- Can add products to cart and place orders
- Can view their order history and track their orders
- Can view their profile and edit their details
- Can view their recommendations based on their previous orders
- Can view similar products of a given product based on the product description
- Can give ratings and reviews to products
- Can make online payments and receive OTPs for confirmation of delivery
- Receives daily email reminders and monthly reports based on their activity
- Can choose whether to receive PDF or text(HTML) monthly reports via email
- Can view all the store managers' requests for sign-up and approve/reject them
- Approve/reject requests from store managers to add new categories, edit or delete existing categories
- Can add/edit/delete products and categories
- Can add/edit/delete products(independently) and categories(needs approval from the Admin)
- Can view their profile and edit their details
- Can export all products as a csv file
- Can view all the orders assigned to them.
- Can update the status of the orders(pending/delivered) by entering the OTP received by the customer.
- Can view their profile and edit their details.
- Can use the CRUD APIs for products and categories using their private API keys.
- Can view their profile and edit their details.
git clone https://github.com/Schefflera-Arboricola/Grocery-Store-Site.git
cd Grocery-Store-Site
- get API credentials for Twilio from here and for Stripe from here. For mailing credentials, you might need to generate App password for your Gmail account.
- set up your API and mail credentials in
.env
file.
sh local_setup.sh
sh local_run.sh
- open
http://127.0.0.1:8080
in the browser to view the website
- In
application/config.py
file, in theLocalDevelopmentConfig
class un-comment theSQLITE_DB_DIR
initialization for docker and comment for the virtual environment docker-compose up --build
- open
http://127.0.0.1:8080
in the browser to view the website
- Install Homebrew (if not already installed):
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- Install Redis:
brew install redis
- Start the Redis service:
brew services start redis
- Test users' login credentials for all types of users :
username
:aditijuneja
password
:123456789
(Change the user's phone number to the number you want to receive the OTP on, using the 'Edit Profile' option on the dashboard)
- here you can find some sample cards' credentials for testing payments functionality for Stripe API, for example,
Card number
:4242 4242 4242 4242
Expiry date
: any future date like12/34
CVC
: any three-digit CVCzipcode
: any random string of integers
Feel free to make any issues/PRs to better the project.