# londheshubham153/tws-e-commerce-app architecture

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

- Interactive diagram: https://gitdiagram.com/londheshubham153/tws-e-commerce-app
- Repository: https://github.com/londheshubham153/tws-e-commerce-app

## Overview

EasyShop is a full-stack online store. Shoppers browse and search products, manage a cart, authenticate, and place or review orders; profile, wishlist, offers, and contact pages extend that experience. The implementation separates Next.js presentation and API routes from Mongoose models and a cached MongoDB connection. Product search/filtering, authentication, cart operations, and order creation are represented as distinct stages. The README documents broad capabilities, while unsampled page wiring and client-to-API requests are not verified here; those links are shown as unverified where useful.

Main entry points: [`src/app/api/orders`](https://github.com/londheshubham153/tws-e-commerce-app/tree/master/src/app/api/orders) (Order routes), [`src/lib/db.ts`](https://github.com/londheshubham153/tws-e-commerce-app/blob/master/src/lib/db.ts) (Database connector), [`src/app/api/cart`](https://github.com/londheshubham153/tws-e-commerce-app/tree/master/src/app/api/cart) (Cart routes), [`src/app`](https://github.com/londheshubham153/tws-e-commerce-app/tree/master/src/app) (Storefront pages)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_presentation["Storefront"]
  node_storefront["Storefront pages"]
  node_search["Search bar<br/>[SearchBar.tsx]"]
  node_filters["Catalog filters"]
  node_productcards["Product cards<br/>[ProductCard.tsx]"]
  node_cartstate["Cart state<br/>[cartSlice.ts]"]
  node_checkoutui["Checkout summary<br/>[OrderSummery.tsx]"]
  node_profileui["Profile and orders"]
end

subgraph group_identity["Identity"]
  node_authapi["Auth routes"]
  node_authlogic["JWT utilities<br/>[utils.ts]"]
  node_middleware["Route middleware<br/>[middleware.ts]"]
end

subgraph group_commerce["Commerce API"]
  node_cartapi["Cart routes"]
  node_orderapi["Order routes"]
end

subgraph group_catalog["Catalog API"]
  node_productapi["Product routes"]
  node_singleproductapi["Slug lookup<br/>[route.ts]"]
end

subgraph group_data["Persistence"]
  node_cartmodel["Cart model<br/>[cart.ts]"]
  node_ordermodel["Order model<br/>[order.ts]"]
  node_productmodel["Product model<br/>[product.ts]"]
  node_usermodel["User model<br/>[user.ts]"]
  node_dbconnector["Database connector<br/>[db.ts]"]
end

node_shopper(("Shopper"))
node_mongodb[("MongoDB")]

node_shopper -->|"browses"| node_storefront
node_storefront -.->|"offers search"| node_search
node_search -->|"routes search"| node_storefront
node_storefront -.->|"offers filtering"| node_filters
node_storefront -.->|"presents products"| node_productcards
node_shopper -->|"manages cart"| node_cartstate
node_cartstate -.->|"syncs cart"| node_cartapi
node_shopper -->|"checks out"| node_checkoutui
node_checkoutui -.->|"submits order"| node_orderapi
node_shopper -->|"reviews orders"| node_profileui
node_profileui -.->|"requests order history"| node_orderapi
node_shopper -->|"signs in"| node_authapi
node_authapi -->|"checks tokens"| node_authlogic
node_middleware -->|"verifies tokens"| node_authlogic
node_cartapi -->|"requires auth"| node_authlogic
node_orderapi -->|"requires auth"| node_authlogic
node_productapi -->|"checks admin"| node_authlogic
node_cartapi -->|"reads and saves"| node_cartmodel
node_cartapi -->|"looks up products"| node_productmodel
node_orderapi -->|"creates and reads"| node_ordermodel
node_orderapi -->|"clears cart"| node_cartmodel
node_orderapi -->|"populates items"| node_productmodel
node_productapi -->|"queries products"| node_productmodel
node_singleproductapi -->|"looks up product"| node_productmodel
node_authapi -->|"uses user records"| node_usermodel
node_cartapi -->|"connects database"| node_dbconnector
node_orderapi -->|"connects database"| node_dbconnector
node_productapi -->|"connects database"| node_dbconnector
node_singleproductapi -->|"connects database"| node_dbconnector
node_authapi -->|"connects database"| node_dbconnector
node_dbconnector -->|"connects"| node_mongodb

click node_storefront "https://github.com/londheshubham153/tws-e-commerce-app/tree/master/src/app"
click node_search "https://github.com/londheshubham153/tws-e-commerce-app/blob/master/src/components/SearchBar.tsx"
click node_filters "https://github.com/londheshubham153/tws-e-commerce-app/tree/master/src/components/filters"
click node_productcards "https://github.com/londheshubham153/tws-e-commerce-app/blob/master/src/components/cards/ProductCard.tsx"
click node_cartstate "https://github.com/londheshubham153/tws-e-commerce-app/blob/master/src/lib/features/cart/cartSlice.ts"
click node_checkoutui "https://github.com/londheshubham153/tws-e-commerce-app/blob/master/src/components/checkout/OrderSummery.tsx"
click node_profileui "https://github.com/londheshubham153/tws-e-commerce-app/tree/master/src/app/profile"
click node_authapi "https://github.com/londheshubham153/tws-e-commerce-app/tree/master/src/app/api/auth"
click node_authlogic "https://github.com/londheshubham153/tws-e-commerce-app/blob/master/src/lib/auth/utils.ts"
click node_middleware "https://github.com/londheshubham153/tws-e-commerce-app/blob/master/src/middleware.ts"
click node_cartapi "https://github.com/londheshubham153/tws-e-commerce-app/tree/master/src/app/api/cart"
click node_orderapi "https://github.com/londheshubham153/tws-e-commerce-app/tree/master/src/app/api/orders"
click node_productapi "https://github.com/londheshubham153/tws-e-commerce-app/tree/master/src/app/api/products"
click node_singleproductapi "https://github.com/londheshubham153/tws-e-commerce-app/blob/master/src/app/api/singleProduct/%5Bslug%5D/route.ts"
click node_cartmodel "https://github.com/londheshubham153/tws-e-commerce-app/blob/master/src/lib/models/cart.ts"
click node_ordermodel "https://github.com/londheshubham153/tws-e-commerce-app/blob/master/src/lib/models/order.ts"
click node_productmodel "https://github.com/londheshubham153/tws-e-commerce-app/blob/master/src/lib/models/product.ts"
click node_usermodel "https://github.com/londheshubham153/tws-e-commerce-app/blob/master/src/lib/models/user.ts"
click node_dbconnector "https://github.com/londheshubham153/tws-e-commerce-app/blob/master/src/lib/db.ts"

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_storefront,node_search,node_filters,node_productcards,node_cartstate,node_checkoutui,node_profileui toneBlue
class node_authapi,node_authlogic,node_middleware,node_mongodb toneAmber
class node_cartapi,node_orderapi toneMint
class node_productapi,node_singleproductapi toneRose
class node_cartmodel,node_ordermodel,node_productmodel,node_usermodel,node_dbconnector,node_shopper toneIndigo
```

## Components

### Storefront

- [Storefront pages](https://github.com/londheshubham153/tws-e-commerce-app/tree/master/src/app): `src/app`
- [Search bar](https://github.com/londheshubham153/tws-e-commerce-app/blob/master/src/components/SearchBar.tsx): `src/components/SearchBar.tsx`
- [Catalog filters](https://github.com/londheshubham153/tws-e-commerce-app/tree/master/src/components/filters): `src/components/filters`
- [Product cards](https://github.com/londheshubham153/tws-e-commerce-app/blob/master/src/components/cards/ProductCard.tsx): `src/components/cards/ProductCard.tsx`
- [Cart state](https://github.com/londheshubham153/tws-e-commerce-app/blob/master/src/lib/features/cart/cartSlice.ts): `src/lib/features/cart/cartSlice.ts`
- [Checkout summary](https://github.com/londheshubham153/tws-e-commerce-app/blob/master/src/components/checkout/OrderSummery.tsx): `src/components/checkout/OrderSummery.tsx`
- [Profile and orders](https://github.com/londheshubham153/tws-e-commerce-app/tree/master/src/app/profile): `src/app/profile`

### Identity

- [Auth routes](https://github.com/londheshubham153/tws-e-commerce-app/tree/master/src/app/api/auth): `src/app/api/auth`
- [JWT utilities](https://github.com/londheshubham153/tws-e-commerce-app/blob/master/src/lib/auth/utils.ts): `src/lib/auth/utils.ts`
- [Route middleware](https://github.com/londheshubham153/tws-e-commerce-app/blob/master/src/middleware.ts): `src/middleware.ts`

### Commerce API

- [Cart routes](https://github.com/londheshubham153/tws-e-commerce-app/tree/master/src/app/api/cart): `src/app/api/cart`
- [Order routes](https://github.com/londheshubham153/tws-e-commerce-app/tree/master/src/app/api/orders): `src/app/api/orders`

### Catalog API

- [Product routes](https://github.com/londheshubham153/tws-e-commerce-app/tree/master/src/app/api/products): `src/app/api/products`
- [Slug lookup](https://github.com/londheshubham153/tws-e-commerce-app/blob/master/src/app/api/singleProduct/%5Bslug%5D/route.ts): `src/app/api/singleProduct/[slug]/route.ts`

### Persistence

- [Cart model](https://github.com/londheshubham153/tws-e-commerce-app/blob/master/src/lib/models/cart.ts): `src/lib/models/cart.ts`
- [Order model](https://github.com/londheshubham153/tws-e-commerce-app/blob/master/src/lib/models/order.ts): `src/lib/models/order.ts`
- [Product model](https://github.com/londheshubham153/tws-e-commerce-app/blob/master/src/lib/models/product.ts): `src/lib/models/product.ts`
- [User model](https://github.com/londheshubham153/tws-e-commerce-app/blob/master/src/lib/models/user.ts): `src/lib/models/user.ts`
- [Database connector](https://github.com/londheshubham153/tws-e-commerce-app/blob/master/src/lib/db.ts): `src/lib/db.ts`

### Other components

- **Shopper**
- **MongoDB**

## Connections

- Shopper → Storefront pages: browses (evidence: `README.md`)
- Storefront pages → Search bar: offers search
- Search bar → Storefront pages: routes search (evidence: `src/components/SearchBar.tsx`)
- Storefront pages → Catalog filters: offers filtering
- Storefront pages → Product cards: presents products
- Shopper → Cart state: manages cart (evidence: `README.md`)
- Cart state → Cart routes: syncs cart
- Shopper → Checkout summary: checks out (evidence: `README.md`)
- Checkout summary → Order routes: submits order
- Shopper → Profile and orders: reviews orders (evidence: `README.md`)
- Profile and orders → Order routes: requests order history
- Shopper → Auth routes: signs in (evidence: `README.md`)
- Auth routes → JWT utilities: checks tokens (evidence: `src/app/api/auth/login/route.ts`)
- Route middleware → JWT utilities: verifies tokens (evidence: `src/middleware.ts`)
- Cart routes → JWT utilities: requires auth (evidence: `src/app/api/cart/route.ts`)
- Order routes → JWT utilities: requires auth (evidence: `src/app/api/orders/route.ts`)
- Product routes → JWT utilities: checks admin (evidence: `src/app/api/products/route.ts`)
- Cart routes → Cart model: reads and saves (evidence: `src/app/api/cart/route.ts`)
- Cart routes → Product model: looks up products (evidence: `src/app/api/cart/route.ts`)
- Order routes → Order model: creates and reads (evidence: `src/app/api/orders/route.ts`)
- Order routes → Cart model: clears cart (evidence: `src/app/api/orders/route.ts`)
- Order routes → Product model: populates items (evidence: `src/app/api/orders/route.ts`)
- Product routes → Product model: queries products (evidence: `src/app/api/products/route.ts`)
- Slug lookup → Product model: looks up product (evidence: `src/app/api/singleProduct/[slug]/route.ts`)
- Auth routes → User model: uses user records (evidence: `src/app/api/auth/login/route.ts`)
- Cart routes → Database connector: connects database (evidence: `src/app/api/cart/route.ts`)
- Order routes → Database connector: connects database (evidence: `src/app/api/orders/route.ts`)
- Product routes → Database connector: connects database (evidence: `src/app/api/products/route.ts`)
- Slug lookup → Database connector: connects database (evidence: `src/app/api/singleProduct/[slug]/route.ts`)
- Auth routes → Database connector: connects database (evidence: `src/app/api/auth/login/route.ts`)
- Database connector → MongoDB: connects (evidence: `src/lib/db.ts`)
