IndiCrave VIT is a microservices-based food ordering platform built with Express and MongoDB. It includes four backend services (Users, Restaurants, Orders, Payments) and a role-aware frontend for customers, restaurant owners, and delivery partners.
- End-to-end order flow: browse restaurants, add items, place orders, process payment, and track delivery.
- Multi-role experience in one app:
customercan order and review.restaurant_ownercan manage restaurant data, menus, and order states.delivery_partnercan claim and complete deliveries.- Clear microservice boundaries with separate databases per domain:
user_db,restaurant_db,order_db,payment_db.- Practical DBMS project architecture demonstrating schema design, service separation, and cross-service frontend orchestration.
IndiCraveVIT/
|-- backend/
| |-- user_server.js
| |-- restaurant_server.js
| |-- order_server.js
| |-- payment_server.js
| `-- package.json
|-- frontend/
| |-- index.html
| |-- app.js
| |-- styles.css
| `-- assets/
`-- README.md
- User Service:
http://localhost:3000(backend/user_server.js) - Restaurant Service:
http://localhost:3001(backend/restaurant_server.js) - Order Service:
http://localhost:3002(backend/order_server.js) - Payment Service:
http://localhost:3003(backend/payment_server.js) - Frontend (static): frontend/index.html
- Node.js 18+
- npm 9+
- MongoDB running locally on
mongodb://127.0.0.1:27017
cd backend
npm installOpen 4 terminals inside backend:
node user_server.jsnode restaurant_server.jsnode order_server.jsnode payment_server.jsOption A: open frontend/index.html directly in your browser.
Option B (recommended): serve frontend with any static server (for example VS Code Live Server).
curl http://localhost:3000/
curl http://localhost:3001/
curl http://localhost:3002/
curl http://localhost:3003/curl -X POST http://localhost:3000/roles \
-H "Content-Type: application/json" \
-d '{"role_name":"customer","permissions":["place_order","review"]}'
curl -X POST http://localhost:3000/roles \
-H "Content-Type: application/json" \
-d '{"role_name":"restaurant_owner","permissions":["manage_restaurant","manage_menu","update_orders"]}'
curl -X POST http://localhost:3000/roles \
-H "Content-Type: application/json" \
-d '{"role_name":"delivery_partner","permissions":["claim_order","mark_delivered"]}'curl -X POST http://localhost:3000/users/register \
-H "Content-Type: application/json" \
-d '{"full_name":"Test User","email":"test@example.com","phone":"9876543210","password":"test123","role_name":"customer"}'
curl -X POST http://localhost:3000/users/login \
-H "Content-Type: application/json" \
-d '{"email":"test@example.com","password":"test123"}'- Backend: Express, Mongoose, CORS, bcryptjs
- Frontend: HTML, CSS, Vanilla JavaScript
- Database: MongoDB (one DB per microservice)
Dependency source: backend/package.json
- Read service source files for route behavior and schema details:
- backend/user_server.js
- backend/restaurant_server.js
- backend/order_server.js
- backend/payment_server.js
- Open an issue in this repository with:
- exact endpoint + payload
- expected vs actual behavior
- relevant service logs
- Kushaagra Sood
- Siddhartha Gupta
- Abhishek Paul
Contributions are welcome through pull requests.
Suggested lightweight workflow:
- Fork the repository.
- Create a feature branch.
- Make small, focused commits with clear messages.
- Add or update tests/check scripts where applicable.
- Open a pull request describing what changed and why.
For larger changes, open an issue first to discuss scope and design.
- Payment processing in backend/payment_server.js is simulated (randomized success/failure).
- Order and payment services are linked by
order_id; refund flow is supported. - This repository currently does not include CI config or a dedicated API docs site.