# nguyenpix/kltn_laptop-ecommerce-ai- architecture

> Architecture diagram of the GitHub repository nguyenpix/kltn_laptop-ecommerce-ai-, 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/nguyenpix/kltn_laptop-ecommerce-ai-
- Repository: https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-

## Overview

This repository is a laptop e-commerce application with a Next.js storefront, a separate admin console, and an Express/MongoDB API. The main customer journey is browsing products, managing a cart, checking out, and viewing orders; authentication, wishlist/reviews, recommendations, news, and AI chat support adjacent workflows. The graph captures major capabilities documented by the route and feature tree. Backend wiring is based on sampled server, routes, and service/controller excerpts; unsampled controller internals are represented at subsystem level, so uncertain call links are omitted.

Main entry points: [`backend/src/routes/v1/index.js`](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/routes/v1/index.js) (API routing), [`backend/src/controllers/chatController.js`](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/controllers/chatController.js) (Conversation API), [`backend/src/controllers/feedbackController.js`](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/controllers/feedbackController.js) (Feedback API), [`backend/src/controllers/orderController.js`](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/controllers/orderController.js) (Cart & orders API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_storefront["Storefront"]
  node_storefront["Shop &amp; account"]
  node_auth["Customer auth"]
  node_catalog["Product catalog"]
  node_cart["Cart &amp; checkout<br/>[cartStore.ts]"]
  node_orders["Order history<br/>[page.tsx]"]
  node_wishlist["Wishlist &amp; feedback<br/>[wishlistStore.ts]"]
  node_reco_ui["Recommendations UI"]
  node_chat_ui["AI chat UI"]
end

subgraph group_admin["Admin Console"]
  node_admin_ui["Admin dashboard"]
  node_admin_auth["Admin auth"]
  node_admin_catalog["Catalog management"]
  node_admin_orders["Order management"]
  node_admin_news["News management"]
end

subgraph group_api["API Backend"]
  node_api_entry["API routing<br/>[index.js]"]
  node_product_api["Catalog API"]
  node_commerce_api["Cart &amp; orders API<br/>[orderController.js]"]
  node_user_api["User API<br/>[userController.js]"]
  node_feedback_api["Feedback API"]
  node_news_api["News API<br/>[newsController.js]"]
  node_chat_api["Conversation API<br/>[chatController.js]"]
end

subgraph group_intelligence["AI &amp; Recommendations"]
  node_recommendation_api["Recommendation API"]
  node_hybrid["Hybrid ranking"]
  node_user_profile["User profiles"]
  node_rag["RAG product search"]
  node_embedding["Text embeddings"]
  node_llm["LLM responses<br/>[llmService.js]"]
end

subgraph group_persistence["Persistence"]
  node_mongo[("MongoDB<br/>[mongodb.js]")]
  node_product_model[("Product data<br/>[Product.js]")]
  node_commerce_models[("Cart &amp; order data<br/>[Order.js]")]
  node_user_model[("User data<br/>[User.js]")]
  node_feedback_model[("Feedback data<br/>[Feedback.js]")]
  node_news_model[("News data<br/>[News.js]")]
  node_chat_models[("Conversation data<br/>[Conversation.js]")]
end

node_shopper(("Shopper"))

node_shopper -->|"browses"| node_storefront
node_shopper -->|"signs in"| node_auth
node_shopper -->|"asks"| node_chat_ui
node_storefront -->|"shows catalog"| node_catalog
node_catalog -->|"requests products"| node_product_api
node_cart -->|"submits cart"| node_commerce_api
node_orders -->|"requests orders"| node_commerce_api
node_auth -->|"authenticates"| node_user_api
node_wishlist -->|"updates wishlist"| node_feedback_api
node_wishlist -->|"submits reviews"| node_feedback_api
node_reco_ui -->|"requests suggestions"| node_recommendation_api
node_chat_ui -->|"sends messages"| node_chat_api
node_admin_ui -->|"gates access"| node_admin_auth
node_admin_ui -->|"manages catalog"| node_admin_catalog
node_admin_ui -->|"manages orders"| node_admin_orders
node_admin_ui -->|"manages news"| node_admin_news
node_admin_catalog -->|"maintains products"| node_product_api
node_admin_orders -->|"manages orders"| node_commerce_api
node_admin_news -->|"maintains articles"| node_news_api
node_api_entry -->|"dispatches"| node_product_api
node_api_entry -->|"dispatches"| node_commerce_api
node_api_entry -->|"dispatches"| node_user_api
node_api_entry -->|"dispatches"| node_feedback_api
node_api_entry -->|"dispatches"| node_news_api
node_api_entry -->|"dispatches"| node_chat_api
node_api_entry -->|"dispatches"| node_recommendation_api
node_product_api -->|"reads/writes"| node_product_model
node_commerce_api -->|"reads/writes"| node_commerce_models
node_user_api -->|"reads/writes"| node_user_model
node_feedback_api -->|"checks product"| node_product_model
node_feedback_api -->|"reads/writes"| node_feedback_model
node_news_api -->|"reads/writes"| node_news_model
node_chat_api -->|"reads/writes"| node_chat_models
node_recommendation_api -->|"gets rankings"| node_hybrid
node_recommendation_api -->|"gets profiles"| node_user_profile
node_hybrid -->|"reads products"| node_product_model
node_user_profile -->|"reads user data"| node_user_model
node_chat_api -->|"searches context"| node_rag
node_chat_api -->|"generates reply"| node_llm
node_rag -->|"embeds query"| node_embedding
node_rag -->|"searches products"| node_product_model
node_api_entry -->|"connects at startup"| node_mongo

click node_storefront "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/tree/main/frontend/src/app/(main)"
click node_auth "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/tree/main/frontend/src/features/auth"
click node_catalog "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/tree/main/frontend/src/features/products"
click node_cart "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/frontend/src/store/cartStore.ts"
click node_orders "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/frontend/src/app/(main)/order/page.tsx"
click node_wishlist "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/frontend/src/store/wishlistStore.ts"
click node_reco_ui "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/tree/main/frontend/src/features/recommendations"
click node_chat_ui "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/tree/main/frontend/src/features/chat"
click node_admin_ui "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/tree/main/admin/src/app/(main)/dashboard"
click node_admin_auth "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/tree/main/admin/src/features/auth"
click node_admin_catalog "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/tree/main/admin/src/features/products"
click node_admin_orders "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/tree/main/admin/src/features/orders"
click node_admin_news "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/tree/main/admin/src/features/news"
click node_api_entry "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/routes/v1/index.js"
click node_product_api "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/controllers/productController.js"
click node_commerce_api "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/controllers/orderController.js"
click node_user_api "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/controllers/userController.js"
click node_feedback_api "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/controllers/feedbackController.js"
click node_news_api "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/controllers/newsController.js"
click node_chat_api "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/controllers/chatController.js"
click node_recommendation_api "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/controllers/recommendationController.js"
click node_hybrid "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/services/hybridRecService.js"
click node_user_profile "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/services/userProfileService.js"
click node_rag "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/services/ragSearchService.js"
click node_embedding "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/services/embeddingService.js"
click node_llm "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/services/llmService.js"
click node_mongo "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/config/mongodb.js"
click node_product_model "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/models/Product.js"
click node_commerce_models "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/models/Order.js"
click node_user_model "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/models/User.js"
click node_feedback_model "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/models/Feedback.js"
click node_news_model "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/models/News.js"
click node_chat_models "https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/models/Conversation.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_storefront,node_auth,node_catalog,node_cart,node_orders,node_wishlist,node_reco_ui,node_chat_ui toneBlue
class node_admin_ui,node_admin_auth,node_admin_catalog,node_admin_orders,node_admin_news toneAmber
class node_api_entry,node_product_api,node_commerce_api,node_user_api,node_feedback_api,node_news_api,node_chat_api toneMint
class node_recommendation_api,node_hybrid,node_user_profile,node_rag,node_embedding,node_llm toneRose
class node_mongo,node_product_model,node_commerce_models,node_user_model,node_feedback_model,node_news_model,node_chat_models,node_shopper toneIndigo
```

## Components

### Storefront

- [Shop & account](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/tree/main/frontend/src/app/(main)): `frontend/src/app/(main)`
- [Customer auth](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/tree/main/frontend/src/features/auth): `frontend/src/features/auth`
- [Product catalog](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/tree/main/frontend/src/features/products): `frontend/src/features/products`
- [Cart & checkout](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/frontend/src/store/cartStore.ts): `frontend/src/store/cartStore.ts`
- [Order history](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/frontend/src/app/(main)/order/page.tsx): `frontend/src/app/(main)/order/page.tsx`
- [Wishlist & feedback](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/frontend/src/store/wishlistStore.ts): `frontend/src/store/wishlistStore.ts`
- [Recommendations UI](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/tree/main/frontend/src/features/recommendations): `frontend/src/features/recommendations`
- [AI chat UI](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/tree/main/frontend/src/features/chat): `frontend/src/features/chat`

### Admin Console

- [Admin dashboard](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/tree/main/admin/src/app/(main)/dashboard): `admin/src/app/(main)/dashboard`
- [Admin auth](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/tree/main/admin/src/features/auth): `admin/src/features/auth`
- [Catalog management](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/tree/main/admin/src/features/products): `admin/src/features/products`
- [Order management](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/tree/main/admin/src/features/orders): `admin/src/features/orders`
- [News management](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/tree/main/admin/src/features/news): `admin/src/features/news`

### API Backend

- [API routing](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/routes/v1/index.js): `backend/src/routes/v1/index.js`
- [Catalog API](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/controllers/productController.js): `backend/src/controllers/productController.js`
- [Cart & orders API](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/controllers/orderController.js): `backend/src/controllers/orderController.js`
- [User API](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/controllers/userController.js): `backend/src/controllers/userController.js`
- [Feedback API](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/controllers/feedbackController.js): `backend/src/controllers/feedbackController.js`
- [News API](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/controllers/newsController.js): `backend/src/controllers/newsController.js`
- [Conversation API](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/controllers/chatController.js): `backend/src/controllers/chatController.js`

### AI & Recommendations

- [Recommendation API](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/controllers/recommendationController.js): `backend/src/controllers/recommendationController.js`
- [Hybrid ranking](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/services/hybridRecService.js): `backend/src/services/hybridRecService.js`
- [User profiles](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/services/userProfileService.js): `backend/src/services/userProfileService.js`
- [RAG product search](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/services/ragSearchService.js): `backend/src/services/ragSearchService.js`
- [Text embeddings](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/services/embeddingService.js): `backend/src/services/embeddingService.js`
- [LLM responses](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/services/llmService.js): `backend/src/services/llmService.js`

### Persistence

- [MongoDB](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/config/mongodb.js): `backend/src/config/mongodb.js`
- [Product data](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/models/Product.js): `backend/src/models/Product.js`
- [Cart & order data](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/models/Order.js): `backend/src/models/Order.js`
- [User data](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/models/User.js): `backend/src/models/User.js`
- [Feedback data](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/models/Feedback.js): `backend/src/models/Feedback.js`
- [News data](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/models/News.js): `backend/src/models/News.js`
- [Conversation data](https://github.com/nguyenpix/kltn_laptop-ecommerce-ai-/blob/main/backend/src/models/Conversation.js): `backend/src/models/Conversation.js`

### Other components

- **Shopper**

## Connections

- Shopper → Shop & account: browses
- Shopper → Customer auth: signs in
- Shopper → AI chat UI: asks
- Shop & account → Product catalog: shows catalog
- Product catalog → Catalog API: requests products
- Cart & checkout → Cart & orders API: submits cart
- Order history → Cart & orders API: requests orders
- Customer auth → User API: authenticates
- Wishlist & feedback → Feedback API: updates wishlist
- Wishlist & feedback → Feedback API: submits reviews
- Recommendations UI → Recommendation API: requests suggestions
- AI chat UI → Conversation API: sends messages
- Admin dashboard → Admin auth: gates access
- Admin dashboard → Catalog management: manages catalog
- Admin dashboard → Order management: manages orders
- Admin dashboard → News management: manages news
- Catalog management → Catalog API: maintains products
- Order management → Cart & orders API: manages orders
- News management → News API: maintains articles
- API routing → Catalog API: dispatches
- API routing → Cart & orders API: dispatches
- API routing → User API: dispatches
- API routing → Feedback API: dispatches
- API routing → News API: dispatches
- API routing → Conversation API: dispatches
- API routing → Recommendation API: dispatches
- Catalog API → Product data: reads/writes
- Cart & orders API → Cart & order data: reads/writes
- User API → User data: reads/writes
- Feedback API → Product data: checks product
- Feedback API → Feedback data: reads/writes
- News API → News data: reads/writes
- Conversation API → Conversation data: reads/writes
- Recommendation API → Hybrid ranking: gets rankings
- Recommendation API → User profiles: gets profiles
- Hybrid ranking → Product data: reads products
- User profiles → User data: reads user data
- Conversation API → RAG product search: searches context
- Conversation API → LLM responses: generates reply
- RAG product search → Text embeddings: embeds query
- RAG product search → Product data: searches products
- API routing → MongoDB: connects at startup
