# monireach2480/e-commerce architecture

> Architecture diagram of the GitHub repository monireach2480/e-commerce, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/monireach2480/e-commerce
- Repository: https://github.com/monireach2480/e-commerce

## Overview

This is a MERN online store. Shoppers browse products, manage a persistent cart, apply coupons, and complete Stripe checkout; admins manage products and inspect sales analytics. React pages and Zustand stores call the Express API, whose controllers coordinate models and external services. The graph preserves documented admin, media, coupon, and analytics capabilities; route/controller internals and some frontend pages were not sampled, so those links are limited to evidence from the tree and README.

Main entry points: [`backend/server.js`](https://github.com/monireach2480/e-commerce/blob/main/backend/server.js) (Express server), [`backend/controllers/payment.controller.js`](https://github.com/monireach2480/e-commerce/blob/main/backend/controllers/payment.controller.js) (Checkout and orders), [`backend/lib/db.js`](https://github.com/monireach2480/e-commerce/blob/main/backend/lib/db.js) (MongoDB), [`backend/controllers/product.controller.js`](https://github.com/monireach2480/e-commerce/blob/main/backend/controllers/product.controller.js) (Product management)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Storefront"]
  node_app["React app<br/>[App.jsx]"]
  node_pages["Store pages"]
  node_userstore["User store<br/>[useUserStore.js]"]
  node_cartstore["Cart store<br/>[useCartStore.js]"]
  node_productstore["Product store<br/>[useProductStore.js]"]
  node_axios["API client<br/>[axios.js]"]
end

subgraph group_api["API layer"]
  node_server["Express server<br/>[server.js]"]
  node_authroutes["Auth routes<br/>[auth.route.js]"]
  node_productroutes["Product routes<br/>[product.route.js]"]
  node_cartroutes["Cart routes<br/>[cart.route.js]"]
  node_couponroutes["Coupon routes<br/>[coupon.route.js]"]
  node_paymentroutes["Payment routes<br/>[payment.route.js]"]
  node_analyticsroutes["Analytics routes<br/>[analytics.route.js]"]
end

subgraph group_commerce["Commerce domain"]
  node_auth["Authentication<br/>[auth.controller.js]"]
  node_products["Product management"]
  node_cart["Cart operations<br/>[cart.controller.js]"]
  node_coupons["Coupon handling"]
  node_payments["Checkout and orders"]
  node_analytics["Sales analytics"]
  node_user_model["User model<br/>[user.model.js]"]
  node_product_model["Product model<br/>[product.model.js]"]
  node_coupon_model["Coupon model<br/>[coupon.model.js]"]
  node_order_model["Order model<br/>[order.model.js]"]
end

subgraph group_services["State and services"]
  node_mongo[("MongoDB<br/>[db.js]")]
  node_redis[("Redis<br/>[redis.js]")]
  node_stripe["Stripe<br/>[stripe.js]"]
  node_cloudinary["Cloudinary<br/>[cloudinary.js]"]
end

node_shopper(("Shopper"))
node_admin(("Store admin"))

node_shopper -->|"uses"| node_app
node_admin -->|"uses"| node_app
node_app -->|"checks session"| node_userstore
node_app -->|"loads cart"| node_cartstore
node_pages -->|"requests products"| node_productstore
node_pages -->|"manages cart"| node_cartstore
node_pages -->|"authenticates"| node_userstore
node_userstore -->|"sends requests"| node_axios
node_cartstore -->|"sends requests"| node_axios
node_productstore -->|"sends requests"| node_axios
node_axios -->|"HTTP API"| node_server
node_server -->|"mounts"| node_authroutes
node_server -->|"mounts"| node_productroutes
node_server -->|"mounts"| node_cartroutes
node_server -->|"mounts"| node_couponroutes
node_server -->|"mounts"| node_paymentroutes
node_server -->|"mounts"| node_analyticsroutes
node_authroutes -->|"dispatches"| node_auth
node_productroutes -->|"dispatches"| node_products
node_cartroutes -->|"dispatches"| node_cart
node_couponroutes -->|"dispatches"| node_coupons
node_paymentroutes -->|"dispatches"| node_payments
node_analyticsroutes -->|"dispatches"| node_analytics
node_auth -->|"reads and writes"| node_user_model
node_auth -->|"stores refresh tokens"| node_redis
node_cart -->|"updates cart"| node_user_model
node_cart -->|"loads cart products"| node_product_model
node_products -->|"reads and writes"| node_product_model
node_products -->|"caches featured items"| node_redis
node_products -->|"uploads media"| node_cloudinary
node_coupons -->|"reads and updates"| node_coupon_model
node_payments -->|"reads and updates"| node_coupon_model
node_payments -->|"creates orders"| node_order_model
node_payments -->|"creates sessions"| node_stripe
node_payments -->|"retrieves sessions"| node_stripe
node_analytics -->|"queries sales data"| node_mongo
node_user_model -->|"persists users"| node_mongo
node_product_model -->|"persists products"| node_mongo
node_coupon_model -->|"persists coupons"| node_mongo
node_order_model -->|"persists orders"| node_mongo

click node_app "https://github.com/monireach2480/e-commerce/blob/main/frontend/src/App.jsx"
click node_pages "https://github.com/monireach2480/e-commerce/tree/main/frontend/src/pages"
click node_userstore "https://github.com/monireach2480/e-commerce/blob/main/frontend/src/stores/useUserStore.js"
click node_cartstore "https://github.com/monireach2480/e-commerce/blob/main/frontend/src/stores/useCartStore.js"
click node_productstore "https://github.com/monireach2480/e-commerce/blob/main/frontend/src/stores/useProductStore.js"
click node_axios "https://github.com/monireach2480/e-commerce/blob/main/frontend/src/lib/axios.js"
click node_server "https://github.com/monireach2480/e-commerce/blob/main/backend/server.js"
click node_authroutes "https://github.com/monireach2480/e-commerce/blob/main/backend/routes/auth.route.js"
click node_productroutes "https://github.com/monireach2480/e-commerce/blob/main/backend/routes/product.route.js"
click node_cartroutes "https://github.com/monireach2480/e-commerce/blob/main/backend/routes/cart.route.js"
click node_couponroutes "https://github.com/monireach2480/e-commerce/blob/main/backend/routes/coupon.route.js"
click node_paymentroutes "https://github.com/monireach2480/e-commerce/blob/main/backend/routes/payment.route.js"
click node_analyticsroutes "https://github.com/monireach2480/e-commerce/blob/main/backend/routes/analytics.route.js"
click node_auth "https://github.com/monireach2480/e-commerce/blob/main/backend/controllers/auth.controller.js"
click node_products "https://github.com/monireach2480/e-commerce/blob/main/backend/controllers/product.controller.js"
click node_cart "https://github.com/monireach2480/e-commerce/blob/main/backend/controllers/cart.controller.js"
click node_coupons "https://github.com/monireach2480/e-commerce/blob/main/backend/controllers/coupon.controller.js"
click node_payments "https://github.com/monireach2480/e-commerce/blob/main/backend/controllers/payment.controller.js"
click node_analytics "https://github.com/monireach2480/e-commerce/blob/main/backend/controllers/analytics.controller.js"
click node_mongo "https://github.com/monireach2480/e-commerce/blob/main/backend/lib/db.js"
click node_redis "https://github.com/monireach2480/e-commerce/blob/main/backend/lib/redis.js"
click node_stripe "https://github.com/monireach2480/e-commerce/blob/main/backend/lib/stripe.js"
click node_cloudinary "https://github.com/monireach2480/e-commerce/blob/main/backend/lib/cloudinary.js"
click node_user_model "https://github.com/monireach2480/e-commerce/blob/main/backend/models/user.model.js"
click node_product_model "https://github.com/monireach2480/e-commerce/blob/main/backend/models/product.model.js"
click node_coupon_model "https://github.com/monireach2480/e-commerce/blob/main/backend/models/coupon.model.js"
click node_order_model "https://github.com/monireach2480/e-commerce/blob/main/backend/models/order.model.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_pages,node_userstore,node_cartstore,node_productstore,node_axios toneBlue
class node_server,node_authroutes,node_productroutes,node_cartroutes,node_couponroutes,node_paymentroutes,node_analyticsroutes toneAmber
class node_auth,node_products,node_cart,node_coupons,node_payments,node_analytics,node_user_model,node_product_model,node_coupon_model,node_order_model toneMint
class node_mongo,node_redis,node_stripe,node_cloudinary toneRose
class node_shopper,node_admin toneIndigo
```

## Components

### Storefront

- [React app](https://github.com/monireach2480/e-commerce/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Store pages](https://github.com/monireach2480/e-commerce/tree/main/frontend/src/pages): `frontend/src/pages`
- [User store](https://github.com/monireach2480/e-commerce/blob/main/frontend/src/stores/useUserStore.js): `frontend/src/stores/useUserStore.js`
- [Cart store](https://github.com/monireach2480/e-commerce/blob/main/frontend/src/stores/useCartStore.js): `frontend/src/stores/useCartStore.js`
- [Product store](https://github.com/monireach2480/e-commerce/blob/main/frontend/src/stores/useProductStore.js): `frontend/src/stores/useProductStore.js`
- [API client](https://github.com/monireach2480/e-commerce/blob/main/frontend/src/lib/axios.js): `frontend/src/lib/axios.js`

### API layer

- [Express server](https://github.com/monireach2480/e-commerce/blob/main/backend/server.js): `backend/server.js`
- [Auth routes](https://github.com/monireach2480/e-commerce/blob/main/backend/routes/auth.route.js): `backend/routes/auth.route.js`
- [Product routes](https://github.com/monireach2480/e-commerce/blob/main/backend/routes/product.route.js): `backend/routes/product.route.js`
- [Cart routes](https://github.com/monireach2480/e-commerce/blob/main/backend/routes/cart.route.js): `backend/routes/cart.route.js`
- [Coupon routes](https://github.com/monireach2480/e-commerce/blob/main/backend/routes/coupon.route.js): `backend/routes/coupon.route.js`
- [Payment routes](https://github.com/monireach2480/e-commerce/blob/main/backend/routes/payment.route.js): `backend/routes/payment.route.js`
- [Analytics routes](https://github.com/monireach2480/e-commerce/blob/main/backend/routes/analytics.route.js): `backend/routes/analytics.route.js`

### Commerce domain

- [Authentication](https://github.com/monireach2480/e-commerce/blob/main/backend/controllers/auth.controller.js): `backend/controllers/auth.controller.js`
- [Product management](https://github.com/monireach2480/e-commerce/blob/main/backend/controllers/product.controller.js): `backend/controllers/product.controller.js`
- [Cart operations](https://github.com/monireach2480/e-commerce/blob/main/backend/controllers/cart.controller.js): `backend/controllers/cart.controller.js`
- [Coupon handling](https://github.com/monireach2480/e-commerce/blob/main/backend/controllers/coupon.controller.js): `backend/controllers/coupon.controller.js`
- [Checkout and orders](https://github.com/monireach2480/e-commerce/blob/main/backend/controllers/payment.controller.js): `backend/controllers/payment.controller.js`
- [Sales analytics](https://github.com/monireach2480/e-commerce/blob/main/backend/controllers/analytics.controller.js): `backend/controllers/analytics.controller.js`
- [User model](https://github.com/monireach2480/e-commerce/blob/main/backend/models/user.model.js): `backend/models/user.model.js`
- [Product model](https://github.com/monireach2480/e-commerce/blob/main/backend/models/product.model.js): `backend/models/product.model.js`
- [Coupon model](https://github.com/monireach2480/e-commerce/blob/main/backend/models/coupon.model.js): `backend/models/coupon.model.js`
- [Order model](https://github.com/monireach2480/e-commerce/blob/main/backend/models/order.model.js): `backend/models/order.model.js`

### State and services

- [MongoDB](https://github.com/monireach2480/e-commerce/blob/main/backend/lib/db.js): `backend/lib/db.js`
- [Redis](https://github.com/monireach2480/e-commerce/blob/main/backend/lib/redis.js): `backend/lib/redis.js`
- [Stripe](https://github.com/monireach2480/e-commerce/blob/main/backend/lib/stripe.js): `backend/lib/stripe.js`
- [Cloudinary](https://github.com/monireach2480/e-commerce/blob/main/backend/lib/cloudinary.js): `backend/lib/cloudinary.js`

### Other components

- **Shopper**
- **Store admin**

## Connections

- Shopper → React app: uses
- Store admin → React app: uses
- React app → User store: checks session
- React app → Cart store: loads cart
- Store pages → Product store: requests products
- Store pages → Cart store: manages cart
- Store pages → User store: authenticates
- User store → API client: sends requests
- Cart store → API client: sends requests
- Product store → API client: sends requests
- API client → Express server: HTTP API
- Express server → Auth routes: mounts
- Express server → Product routes: mounts
- Express server → Cart routes: mounts
- Express server → Coupon routes: mounts
- Express server → Payment routes: mounts
- Express server → Analytics routes: mounts
- Auth routes → Authentication: dispatches
- Product routes → Product management: dispatches
- Cart routes → Cart operations: dispatches
- Coupon routes → Coupon handling: dispatches
- Payment routes → Checkout and orders: dispatches
- Analytics routes → Sales analytics: dispatches
- Authentication → User model: reads and writes
- Authentication → Redis: stores refresh tokens
- Cart operations → User model: updates cart
- Cart operations → Product model: loads cart products
- Product management → Product model: reads and writes
- Product management → Redis: caches featured items
- Product management → Cloudinary: uploads media
- Coupon handling → Coupon model: reads and updates
- Checkout and orders → Coupon model: reads and updates
- Checkout and orders → Order model: creates orders
- Checkout and orders → Stripe: creates sessions
- Checkout and orders → Stripe: retrieves sessions
- Sales analytics → MongoDB: queries sales data
- User model → MongoDB: persists users
- Product model → MongoDB: persists products
- Coupon model → MongoDB: persists coupons
- Order model → MongoDB: persists orders
