# haruto1508/sen_da_store architecture

> Architecture diagram of the GitHub repository haruto1508/sen_da_store, 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/haruto1508/sen_da_store
- Repository: https://github.com/haruto1508/sen_da_store

## Overview

Sen Xinh Garden is a succulent e-commerce application: customers browse products, manage a cart, check out, and follow or review orders; staff manage the catalog, orders, customers, coupons, and shipping. The graph includes the React entry point, API boundary, and Spring controller/service/repository layers, plus documented-by-tree integrations. The README is empty and source excerpts are partial, so uncertain wiring—especially unsampled frontend routes and backend services—is omitted.

Main entry points: [`backend/src/main/java/com/succulentshop/backend/service/OrderService.java`](https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/service/OrderService.java) (Order lifecycle), [`frontend/src/services/api.js`](https://github.com/haruto1508/sen_da_store/blob/main/frontend/src/services/api.js) (API client), [`backend/src/main/java/com/succulentshop/backend/controller/AdminController.java`](https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/controller/AdminController.java) (Admin API), [`backend/src/main/java/com/succulentshop/backend/service/AdminService.java`](https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/service/AdminService.java) (Admin operations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_customer["Customer storefront"]
  node_app["React app<br/>[App.jsx]"]
  node_pages["Store pages"]
  node_api["API client<br/>[api.js]"]
  node_product_reviews["Product reviews"]
end

subgraph group_commerce["Commerce backend"]
  node_product_controller["Product API"]
  node_product_service["Product service"]
  node_cart_controller["Cart API"]
  node_cart_service["Cart validation<br/>[CartService.java]"]
  node_order_controller["Order API"]
  node_order_service["Order lifecycle<br/>[OrderService.java]"]
  node_coupon_controller["Coupon API"]
  node_coupon_service["Coupon rules<br/>[CouponService.java]"]
  node_shipping_service["Shipping rates"]
  node_order_store[("Order records")]
  node_product_store[("Product records")]
end

subgraph group_identity["Identity and accounts"]
  node_auth_controller["Authentication API"]
  node_auth_service["Authentication<br/>[AuthService.java]"]
end

subgraph group_admin["Store operations"]
  node_admin_controller["Admin API"]
  node_admin_service["Admin operations<br/>[AdminService.java]"]
  node_order_events["Order events"]
  node_admin_sse["Admin live feed"]
  node_sse_hook["Live order hook<br/>[useOrderEvents.js]"]
end

subgraph group_integrations["External integrations"]
  node_bank_webhook["Transfer webhook"]
  node_bank_service["Transfer processing"]
  node_cloudinary_service["Image storage"]
end

node_shopper(("Shopper"))
node_staff(("Store staff"))
node_cloudinary[("Cloudinary")]

node_shopper -->|"uses"| node_app
node_app -->|"routes"| node_pages
node_app -->|"loads products"| node_api
node_product_reviews -->|"submits reviews"| node_api
node_api -->|"requests catalog"| node_product_controller
node_api -->|"validates coupons"| node_coupon_controller
node_api -->|"order requests"| node_order_controller
node_api -->|"cart requests"| node_cart_controller
node_product_controller -->|"delegates"| node_product_service
node_cart_controller -->|"delegates"| node_cart_service
node_order_controller -->|"delegates"| node_order_service
node_coupon_controller -->|"delegates"| node_coupon_service
node_order_service -->|"validates discount"| node_coupon_service
node_order_service -->|"calculates shipping"| node_shipping_service
node_order_service -->|"reads and writes"| node_order_store
node_product_service -->|"reads and writes"| node_product_store
node_order_service -->|"checks stock"| node_product_store
node_order_controller -.-> node_bank_webhook
node_bank_webhook -->|"delegates"| node_bank_service
node_staff -->|"manages store"| node_admin_controller
node_admin_controller -->|"delegates"| node_admin_service
node_admin_service -->|"manages orders"| node_order_store
node_admin_service -->|"manages stock"| node_product_store
node_order_service -->|"publishes changes"| node_order_events
node_admin_service -->|"publishes changes"| node_order_events
node_order_events -->|"notifies"| node_admin_sse
node_sse_hook -->|"gets ticket"| node_api
node_sse_hook -->|"opens event stream"| node_admin_controller
node_admin_controller -->|"subscribes"| node_admin_sse
node_bank_service -.->|"updates payment"| node_order_service
node_admin_controller -.->|"image operations"| node_cloudinary_service
node_cloudinary_service -.->|"uploads and deletes"| node_cloudinary

click node_app "https://github.com/haruto1508/sen_da_store/blob/main/frontend/src/App.jsx"
click node_pages "https://github.com/haruto1508/sen_da_store/tree/main/frontend/src/pages"
click node_api "https://github.com/haruto1508/sen_da_store/blob/main/frontend/src/services/api.js"
click node_product_reviews "https://github.com/haruto1508/sen_da_store/blob/main/frontend/src/components/product/ProductReviewsSection.jsx"
click node_product_controller "https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/controller/ProductController.java"
click node_product_service "https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/service/ProductService.java"
click node_cart_controller "https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/controller/CartController.java"
click node_cart_service "https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/service/CartService.java"
click node_order_controller "https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/controller/OrderController.java"
click node_order_service "https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/service/OrderService.java"
click node_coupon_controller "https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/controller/CouponController.java"
click node_coupon_service "https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/service/CouponService.java"
click node_shipping_service "https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/service/ShippingService.java"
click node_order_store "https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/repository/OrderRepository.java"
click node_product_store "https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/repository/ProductRepository.java"
click node_auth_controller "https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/controller/AuthController.java"
click node_auth_service "https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/service/AuthService.java"
click node_admin_controller "https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/controller/AdminController.java"
click node_admin_service "https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/service/AdminService.java"
click node_order_events "https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/event/OrderEventPublisher.java"
click node_admin_sse "https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/service/AdminOrderSseService.java"
click node_sse_hook "https://github.com/haruto1508/sen_da_store/blob/main/frontend/src/hooks/useOrderEvents.js"
click node_bank_webhook "https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/controller/BankTransferWebhookController.java"
click node_bank_service "https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/service/BankTransferService.java"
click node_cloudinary_service "https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/service/CloudinaryService.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_app,node_pages,node_api,node_product_reviews toneBlue
class node_product_controller,node_product_service,node_cart_controller,node_cart_service,node_order_controller,node_order_service,node_coupon_controller,node_coupon_service,node_shipping_service,node_order_store,node_product_store,node_cloudinary toneAmber
class node_auth_controller,node_auth_service toneMint
class node_admin_controller,node_admin_service,node_order_events,node_admin_sse,node_sse_hook toneRose
class node_bank_webhook,node_bank_service,node_cloudinary_service,node_shopper,node_staff toneIndigo
```

## Components

### Customer storefront

- [React app](https://github.com/haruto1508/sen_da_store/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Store pages](https://github.com/haruto1508/sen_da_store/tree/main/frontend/src/pages): `frontend/src/pages`
- [API client](https://github.com/haruto1508/sen_da_store/blob/main/frontend/src/services/api.js): `frontend/src/services/api.js`
- [Product reviews](https://github.com/haruto1508/sen_da_store/blob/main/frontend/src/components/product/ProductReviewsSection.jsx): `frontend/src/components/product/ProductReviewsSection.jsx`

### Commerce backend

- [Product API](https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/controller/ProductController.java): `backend/src/main/java/com/succulentshop/backend/controller/ProductController.java`
- [Product service](https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/service/ProductService.java): `backend/src/main/java/com/succulentshop/backend/service/ProductService.java`
- [Cart API](https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/controller/CartController.java): `backend/src/main/java/com/succulentshop/backend/controller/CartController.java`
- [Cart validation](https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/service/CartService.java): `backend/src/main/java/com/succulentshop/backend/service/CartService.java`
- [Order API](https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/controller/OrderController.java): `backend/src/main/java/com/succulentshop/backend/controller/OrderController.java`
- [Order lifecycle](https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/service/OrderService.java): `backend/src/main/java/com/succulentshop/backend/service/OrderService.java`
- [Coupon API](https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/controller/CouponController.java): `backend/src/main/java/com/succulentshop/backend/controller/CouponController.java`
- [Coupon rules](https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/service/CouponService.java): `backend/src/main/java/com/succulentshop/backend/service/CouponService.java`
- [Shipping rates](https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/service/ShippingService.java): `backend/src/main/java/com/succulentshop/backend/service/ShippingService.java`
- [Order records](https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/repository/OrderRepository.java): `backend/src/main/java/com/succulentshop/backend/repository/OrderRepository.java`
- [Product records](https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/repository/ProductRepository.java): `backend/src/main/java/com/succulentshop/backend/repository/ProductRepository.java`

### Identity and accounts

- [Authentication API](https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/controller/AuthController.java): `backend/src/main/java/com/succulentshop/backend/controller/AuthController.java`
- [Authentication](https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/service/AuthService.java): `backend/src/main/java/com/succulentshop/backend/service/AuthService.java`

### Store operations

- [Admin API](https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/controller/AdminController.java): `backend/src/main/java/com/succulentshop/backend/controller/AdminController.java`
- [Admin operations](https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/service/AdminService.java): `backend/src/main/java/com/succulentshop/backend/service/AdminService.java`
- [Order events](https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/event/OrderEventPublisher.java): `backend/src/main/java/com/succulentshop/backend/event/OrderEventPublisher.java`
- [Admin live feed](https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/service/AdminOrderSseService.java): `backend/src/main/java/com/succulentshop/backend/service/AdminOrderSseService.java`
- [Live order hook](https://github.com/haruto1508/sen_da_store/blob/main/frontend/src/hooks/useOrderEvents.js): `frontend/src/hooks/useOrderEvents.js`

### External integrations

- [Transfer webhook](https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/controller/BankTransferWebhookController.java): `backend/src/main/java/com/succulentshop/backend/controller/BankTransferWebhookController.java`
- [Transfer processing](https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/service/BankTransferService.java): `backend/src/main/java/com/succulentshop/backend/service/BankTransferService.java`
- [Image storage](https://github.com/haruto1508/sen_da_store/blob/main/backend/src/main/java/com/succulentshop/backend/service/CloudinaryService.java): `backend/src/main/java/com/succulentshop/backend/service/CloudinaryService.java`

### Other components

- **Shopper**
- **Store staff**
- **Cloudinary**

## Connections

- Shopper → React app: uses
- React app → Store pages: routes
- React app → API client: loads products
- Product reviews → API client: submits reviews
- API client → Product API: requests catalog
- API client → Coupon API: validates coupons
- API client → Order API: order requests
- API client → Cart API: cart requests
- Product API → Product service: delegates
- Cart API → Cart validation: delegates
- Order API → Order lifecycle: delegates
- Coupon API → Coupon rules: delegates
- Order lifecycle → Coupon rules: validates discount
- Order lifecycle → Shipping rates: calculates shipping
- Order lifecycle → Order records: reads and writes
- Product service → Product records: reads and writes
- Order lifecycle → Product records: checks stock
- Order API → Transfer webhook
- Transfer webhook → Transfer processing: delegates
- Store staff → Admin API: manages store
- Admin API → Admin operations: delegates
- Admin operations → Order records: manages orders
- Admin operations → Product records: manages stock
- Order lifecycle → Order events: publishes changes
- Admin operations → Order events: publishes changes
- Order events → Admin live feed: notifies
- Live order hook → API client: gets ticket
- Live order hook → Admin API: opens event stream
- Admin API → Admin live feed: subscribes
- Transfer processing → Order lifecycle: updates payment
- Admin API → Image storage: image operations
- Image storage → Cloudinary: uploads and deletes
