# thieu2451220099/24ct2_tran_duy_thieu_cnpm architecture

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

- Interactive diagram: https://gitdiagram.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm
- Repository: https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm

## Overview

Thiệu_shop is a Spring Boot online storefront. Customers browse or search products, add size/color variants to a session cart, check out using COD or bank transfer, and manage their orders; administrators maintain products and order statuses. Controllers handle the web interactions, while OrderService owns order creation, stock deduction/restoration, and status rules. The README documents QR bank transfer, while sampled code does not show a payment-provider integration; source excerpts are incomplete, so some documented capability links are left unverified.

Main entry points: [`src/main/java/com/shop/service/OrderService.java`](https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/service/OrderService.java) (Order and stock rules), [`src/main/java/com/shop/controller/OrderController.java`](https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/controller/OrderController.java) (Checkout and orders), [`src/main/java/com/shop/controller/AdminController.java`](https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/controller/AdminController.java) (Admin controls), [`src/main/java/com/shop/repository/ProductRepository.java`](https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/repository/ProductRepository.java) (Product repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web workflows"]
  node_auth["Account access"]
  node_catalog["Product browsing"]
  node_cart["Session cart"]
  node_checkout["Checkout and orders"]
  node_admin_ui["Admin controls"]
  node_views["Thymeleaf views"]
end

subgraph group_commerce["Commerce domain"]
  node_order_logic["Order and stock rules<br/>[OrderService.java]"]
  node_products["Product records<br/>[Product.java]"]
  node_users["User records<br/>[User.java]"]
  node_orders["Order records<br/>[Order.java]"]
  node_order_items["Order line records<br/>[OrderItem.java]"]
end

subgraph group_persistence["Persistence"]
  node_product_repo["Product repository"]
  node_user_repo["User repository"]
  node_order_repo["Order repository"]
  node_item_repo["Order item repository"]
  node_mysql[("MySQL database<br/>[shop_online.sql]")]
end

subgraph group_operations["Application setup"]
  node_seed["Initial data setup"]
  node_security["Security configuration"]
  node_application["Spring Boot app"]
end

node_shopper(("Shopper"))
node_admin(("Administrator"))

node_shopper -->|"signs in"| node_auth
node_shopper -->|"browses products"| node_catalog
node_shopper -->|"updates cart"| node_cart
node_shopper -->|"places orders"| node_checkout
node_admin -->|"manages shop"| node_admin_ui
node_auth -->|"looks up users"| node_user_repo
node_catalog -->|"searches products"| node_product_repo
node_cart -->|"loads products"| node_product_repo
node_checkout -->|"creates or cancels"| node_order_logic
node_checkout -->|"reads orders"| node_order_repo
node_checkout -->|"loads order lines"| node_item_repo
node_checkout -->|"updates profile"| node_user_repo
node_admin_ui -->|"changes status"| node_order_logic
node_admin_ui -->|"saves products"| node_product_repo
node_admin_ui -->|"loads orders"| node_order_repo
node_admin_ui -->|"loads order lines"| node_item_repo
node_order_logic -->|"checks stock"| node_product_repo
node_order_logic -->|"saves orders"| node_order_repo
node_order_logic -->|"saves or loads lines"| node_item_repo
node_seed -->|"seeds products"| node_product_repo
node_seed -->|"seeds users"| node_user_repo
node_checkout -->|"renders order pages"| node_views
node_cart -->|"renders cart"| node_views
node_admin_ui -->|"renders admin pages"| node_views
node_product_repo -.->|"persists products"| node_mysql
node_user_repo -.->|"persists users"| node_mysql
node_order_repo -.->|"persists orders"| node_mysql
node_item_repo -.->|"persists order lines"| node_mysql
node_order_logic -->|"builds order data"| node_orders
node_order_logic -->|"builds line data"| node_order_items
node_order_logic -->|"adjusts stock"| node_products
node_application -.->|"uses configuration"| node_security

click node_auth "https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/controller/AuthController.java"
click node_catalog "https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/controller/HomeController.java"
click node_cart "https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/controller/CartController.java"
click node_checkout "https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/controller/OrderController.java"
click node_admin_ui "https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/controller/AdminController.java"
click node_views "https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/tree/main/src/main/resources/templates"
click node_order_logic "https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/service/OrderService.java"
click node_products "https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/model/Product.java"
click node_users "https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/model/User.java"
click node_orders "https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/model/Order.java"
click node_order_items "https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/model/OrderItem.java"
click node_product_repo "https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/repository/ProductRepository.java"
click node_user_repo "https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/repository/UserRepository.java"
click node_order_repo "https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/repository/OrderRepository.java"
click node_item_repo "https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/repository/OrderItemRepository.java"
click node_mysql "https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/database/shop_online.sql"
click node_seed "https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/config/DataInitializer.java"
click node_security "https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/config/SecurityConfig.java"
click node_application "https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/ShopOnlineApplication.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_auth,node_catalog,node_cart,node_checkout,node_admin_ui,node_views toneBlue
class node_order_logic,node_products,node_users,node_orders,node_order_items toneAmber
class node_product_repo,node_user_repo,node_order_repo,node_item_repo,node_mysql toneMint
class node_seed,node_security,node_application toneRose
class node_shopper,node_admin toneIndigo
```

## Components

### Web workflows

- [Account access](https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/controller/AuthController.java): `src/main/java/com/shop/controller/AuthController.java`
- [Product browsing](https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/controller/HomeController.java): `src/main/java/com/shop/controller/HomeController.java`
- [Session cart](https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/controller/CartController.java): `src/main/java/com/shop/controller/CartController.java`
- [Checkout and orders](https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/controller/OrderController.java): `src/main/java/com/shop/controller/OrderController.java`
- [Admin controls](https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/controller/AdminController.java): `src/main/java/com/shop/controller/AdminController.java`
- [Thymeleaf views](https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/tree/main/src/main/resources/templates): `src/main/resources/templates`

### Commerce domain

- [Order and stock rules](https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/service/OrderService.java): `src/main/java/com/shop/service/OrderService.java`
- [Product records](https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/model/Product.java): `src/main/java/com/shop/model/Product.java`
- [User records](https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/model/User.java): `src/main/java/com/shop/model/User.java`
- [Order records](https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/model/Order.java): `src/main/java/com/shop/model/Order.java`
- [Order line records](https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/model/OrderItem.java): `src/main/java/com/shop/model/OrderItem.java`

### Persistence

- [Product repository](https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/repository/ProductRepository.java): `src/main/java/com/shop/repository/ProductRepository.java`
- [User repository](https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/repository/UserRepository.java): `src/main/java/com/shop/repository/UserRepository.java`
- [Order repository](https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/repository/OrderRepository.java): `src/main/java/com/shop/repository/OrderRepository.java`
- [Order item repository](https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/repository/OrderItemRepository.java): `src/main/java/com/shop/repository/OrderItemRepository.java`
- [MySQL database](https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/database/shop_online.sql): `database/shop_online.sql`

### Application setup

- [Initial data setup](https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/config/DataInitializer.java): `src/main/java/com/shop/config/DataInitializer.java`
- [Security configuration](https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/config/SecurityConfig.java): `src/main/java/com/shop/config/SecurityConfig.java`
- [Spring Boot app](https://github.com/thieu2451220099/24ct2_tran_duy_thieu_cnpm/blob/main/src/main/java/com/shop/ShopOnlineApplication.java): `src/main/java/com/shop/ShopOnlineApplication.java`

### Other components

- **Shopper**
- **Administrator**

## Connections

- Shopper → Account access: signs in (evidence: `README.md`)
- Shopper → Product browsing: browses products (evidence: `README.md`)
- Shopper → Session cart: updates cart (evidence: `src/main/java/com/shop/controller/CartController.java`)
- Shopper → Checkout and orders: places orders (evidence: `README.md`)
- Administrator → Admin controls: manages shop (evidence: `README.md`)
- Account access → User repository: looks up users (evidence: `src/main/java/com/shop/controller/AuthController.java`)
- Product browsing → Product repository: searches products (evidence: `src/main/java/com/shop/controller/HomeController.java`)
- Session cart → Product repository: loads products (evidence: `src/main/java/com/shop/controller/CartController.java`)
- Checkout and orders → Order and stock rules: creates or cancels (evidence: `src/main/java/com/shop/controller/OrderController.java`)
- Checkout and orders → Order repository: reads orders (evidence: `src/main/java/com/shop/controller/OrderController.java`)
- Checkout and orders → Order item repository: loads order lines (evidence: `src/main/java/com/shop/controller/OrderController.java`)
- Checkout and orders → User repository: updates profile (evidence: `src/main/java/com/shop/controller/OrderController.java`)
- Admin controls → Order and stock rules: changes status (evidence: `src/main/java/com/shop/controller/AdminController.java`)
- Admin controls → Product repository: saves products (evidence: `src/main/java/com/shop/controller/AdminController.java`)
- Admin controls → Order repository: loads orders (evidence: `src/main/java/com/shop/controller/AdminController.java`)
- Admin controls → Order item repository: loads order lines (evidence: `src/main/java/com/shop/controller/AdminController.java`)
- Order and stock rules → Product repository: checks stock (evidence: `src/main/java/com/shop/service/OrderService.java`)
- Order and stock rules → Order repository: saves orders (evidence: `src/main/java/com/shop/service/OrderService.java`)
- Order and stock rules → Order item repository: saves or loads lines (evidence: `src/main/java/com/shop/service/OrderService.java`)
- Initial data setup → Product repository: seeds products (evidence: `src/main/java/com/shop/config/DataInitializer.java`)
- Initial data setup → User repository: seeds users (evidence: `src/main/java/com/shop/config/DataInitializer.java`)
- Checkout and orders → Thymeleaf views: renders order pages (evidence: `src/main/java/com/shop/controller/OrderController.java`)
- Session cart → Thymeleaf views: renders cart (evidence: `src/main/java/com/shop/controller/CartController.java`)
- Admin controls → Thymeleaf views: renders admin pages (evidence: `src/main/java/com/shop/controller/AdminController.java`)
- Product repository → MySQL database: persists products
- User repository → MySQL database: persists users
- Order repository → MySQL database: persists orders
- Order item repository → MySQL database: persists order lines
- Order and stock rules → Order records: builds order data (evidence: `src/main/java/com/shop/service/OrderService.java`)
- Order and stock rules → Order line records: builds line data (evidence: `src/main/java/com/shop/service/OrderService.java`)
- Order and stock rules → Product records: adjusts stock (evidence: `src/main/java/com/shop/service/OrderService.java`)
- Spring Boot app → Security configuration: uses configuration
