# duygri/do-an-htttdn-crm architecture

> Architecture diagram of the GitHub repository duygri/do-an-htttdn-crm, 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/duygri/do-an-htttdn-crm
- Repository: https://github.com/duygri/do-an-htttdn-crm

## Overview

This is a Spring Boot CRM backend with React customer and admin interfaces. The principal customer journey is browsing and filtering products, managing a cart, and placing an order for COD or PayOS checkout; account, profile, feedback, wishlist, notifications, and surveys are supporting capabilities. Admin routes cover management and reporting. The graph combines sampled behavior with capabilities indicated by the source tree; links between unsampled components are omitted where their wiring cannot be confirmed.

Main entry points: [`frontend/src/api.js`](https://github.com/duygri/do-an-htttdn-crm/blob/main/frontend/src/api.js) (API client), [`backend/src/main/java/com/htttdn/crm/service/OrderService.java`](https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/service/OrderService.java) (Order and checkout), [`frontend/src/App.jsx`](https://github.com/duygri/do-an-htttdn-crm/blob/main/frontend/src/App.jsx) (Customer storefront), [`frontend/src/AdminApp.jsx`](https://github.com/duygri/do-an-htttdn-crm/blob/main/frontend/src/AdminApp.jsx) (Admin interface)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_clients["Web clients"]
  node_customer_ui["Customer storefront<br/>[App.jsx]"]
  node_admin_ui["Admin interface<br/>[AdminApp.jsx]"]
  node_api_client["API client<br/>[api.js]"]
end

subgraph group_identity["Identity and access"]
  node_customer_auth["Customer auth"]
  node_admin_auth["Admin auth"]
  node_jwt["JWT service"]
end

subgraph group_storefront["Customer commerce"]
  node_catalog["Product catalog"]
  node_product_data[("Product data")]
  node_cart["Cart operations<br/>[CartService.java]"]
  node_orders["Order and checkout<br/>[OrderService.java]"]
  node_order_data[("Order and payment data")]
  node_payos["PayOS integration<br/>[PayosService.java]"]
end

subgraph group_engagement["CRM engagement"]
  node_profile["Customer profile"]
  node_addresses["Saved addresses"]
  node_feedback["Product feedback"]
  node_surveys["Customer surveys"]
  node_wishlist["Wishlist"]
  node_notifications["Notifications"]
end

subgraph group_management["Admin management"]
  node_admin_ops["Admin operations"]
  node_admin_reports["Reports and survey stats"]
end

node_customer(("Customer"))
node_admin(("Admin user"))

node_customer -->|"uses"| node_customer_ui
node_admin -->|"uses"| node_admin_ui
node_customer_ui -->|"requests"| node_api_client
node_admin_ui -->|"requests"| node_api_client
node_api_client -->|"calls"| node_customer_auth
node_api_client -->|"calls"| node_admin_auth
node_customer_auth -->|"issues tokens"| node_jwt
node_admin_auth -->|"issues tokens"| node_jwt
node_api_client -->|"calls"| node_catalog
node_catalog -->|"searches"| node_product_data
node_api_client -->|"calls"| node_cart
node_api_client -->|"calls"| node_orders
node_orders -->|"locks and updates"| node_product_data
node_orders -->|"persists orders"| node_order_data
node_orders -->|"creates checkout link"| node_payos
node_api_client -->|"calls"| node_profile
node_api_client -->|"calls"| node_addresses
node_api_client -->|"calls"| node_feedback
node_api_client -->|"calls"| node_surveys
node_api_client -->|"calls"| node_wishlist
node_api_client -->|"calls"| node_notifications
node_api_client -->|"calls"| node_admin_ops
node_api_client -->|"calls"| node_admin_reports

click node_customer_ui "https://github.com/duygri/do-an-htttdn-crm/blob/main/frontend/src/App.jsx"
click node_admin_ui "https://github.com/duygri/do-an-htttdn-crm/blob/main/frontend/src/AdminApp.jsx"
click node_api_client "https://github.com/duygri/do-an-htttdn-crm/blob/main/frontend/src/api.js"
click node_customer_auth "https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/controller/AuthController.java"
click node_admin_auth "https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/controller/AdminAuthController.java"
click node_jwt "https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/security/JwtTokenService.java"
click node_catalog "https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/controller/ProductController.java"
click node_product_data "https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/repository/ProductRepository.java"
click node_cart "https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/service/CartService.java"
click node_orders "https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/service/OrderService.java"
click node_order_data "https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/repository/OrderRepository.java"
click node_payos "https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/service/PayosService.java"
click node_profile "https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/controller/ProfileController.java"
click node_addresses "https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/controller/AddressController.java"
click node_feedback "https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/controller/FeedbackController.java"
click node_surveys "https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/controller/SurveyController.java"
click node_wishlist "https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/controller/WishlistController.java"
click node_notifications "https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/controller/NotificationController.java"
click node_admin_ops "https://github.com/duygri/do-an-htttdn-crm/tree/main/backend/src/main/java/com/htttdn/crm/controller"
click node_admin_reports "https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/controller/AdminReportController.java"

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_customer_ui,node_admin_ui,node_api_client,node_admin toneBlue
class node_customer_auth,node_admin_auth,node_jwt toneAmber
class node_catalog,node_product_data,node_cart,node_orders,node_order_data,node_payos toneMint
class node_profile,node_addresses,node_feedback,node_surveys,node_wishlist,node_notifications toneRose
class node_admin_ops,node_admin_reports,node_customer toneIndigo
```

## Components

### Web clients

- [Customer storefront](https://github.com/duygri/do-an-htttdn-crm/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Admin interface](https://github.com/duygri/do-an-htttdn-crm/blob/main/frontend/src/AdminApp.jsx): `frontend/src/AdminApp.jsx`
- [API client](https://github.com/duygri/do-an-htttdn-crm/blob/main/frontend/src/api.js): `frontend/src/api.js`

### Identity and access

- [Customer auth](https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/controller/AuthController.java): `backend/src/main/java/com/htttdn/crm/controller/AuthController.java`
- [Admin auth](https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/controller/AdminAuthController.java): `backend/src/main/java/com/htttdn/crm/controller/AdminAuthController.java`
- [JWT service](https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/security/JwtTokenService.java): `backend/src/main/java/com/htttdn/crm/security/JwtTokenService.java`

### Customer commerce

- [Product catalog](https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/controller/ProductController.java): `backend/src/main/java/com/htttdn/crm/controller/ProductController.java`
- [Product data](https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/repository/ProductRepository.java): `backend/src/main/java/com/htttdn/crm/repository/ProductRepository.java`
- [Cart operations](https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/service/CartService.java): `backend/src/main/java/com/htttdn/crm/service/CartService.java`
- [Order and checkout](https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/service/OrderService.java): `backend/src/main/java/com/htttdn/crm/service/OrderService.java`
- [Order and payment data](https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/repository/OrderRepository.java): `backend/src/main/java/com/htttdn/crm/repository/OrderRepository.java`
- [PayOS integration](https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/service/PayosService.java): `backend/src/main/java/com/htttdn/crm/service/PayosService.java`

### CRM engagement

- [Customer profile](https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/controller/ProfileController.java): `backend/src/main/java/com/htttdn/crm/controller/ProfileController.java`
- [Saved addresses](https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/controller/AddressController.java): `backend/src/main/java/com/htttdn/crm/controller/AddressController.java`
- [Product feedback](https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/controller/FeedbackController.java): `backend/src/main/java/com/htttdn/crm/controller/FeedbackController.java`
- [Customer surveys](https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/controller/SurveyController.java): `backend/src/main/java/com/htttdn/crm/controller/SurveyController.java`
- [Wishlist](https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/controller/WishlistController.java): `backend/src/main/java/com/htttdn/crm/controller/WishlistController.java`
- [Notifications](https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/controller/NotificationController.java): `backend/src/main/java/com/htttdn/crm/controller/NotificationController.java`

### Admin management

- [Admin operations](https://github.com/duygri/do-an-htttdn-crm/tree/main/backend/src/main/java/com/htttdn/crm/controller): `backend/src/main/java/com/htttdn/crm/controller`
- [Reports and survey stats](https://github.com/duygri/do-an-htttdn-crm/blob/main/backend/src/main/java/com/htttdn/crm/controller/AdminReportController.java): `backend/src/main/java/com/htttdn/crm/controller/AdminReportController.java`

### Other components

- **Customer**
- **Admin user**

## Connections

- Customer → Customer storefront: uses
- Admin user → Admin interface: uses
- Customer storefront → API client: requests
- Admin interface → API client: requests
- API client → Customer auth: calls
- API client → Admin auth: calls
- Customer auth → JWT service: issues tokens
- Admin auth → JWT service: issues tokens
- API client → Product catalog: calls
- Product catalog → Product data: searches
- API client → Cart operations: calls
- API client → Order and checkout: calls
- Order and checkout → Product data: locks and updates
- Order and checkout → Order and payment data: persists orders
- Order and checkout → PayOS integration: creates checkout link
- API client → Customer profile: calls
- API client → Saved addresses: calls
- API client → Product feedback: calls
- API client → Customer surveys: calls
- API client → Wishlist: calls
- API client → Notifications: calls
- API client → Admin operations: calls
- API client → Reports and survey stats: calls
