# alirezaojani1385/online-store-fullstack architecture

> Architecture diagram of the GitHub repository alirezaojani1385/online-store-fullstack, 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/alirezaojani1385/online-store-fullstack
- Repository: https://github.com/alirezaojani1385/online-store-fullstack

## Overview

Store is a full-stack e-commerce learning project: customers browse products, authenticate, manage a pending-order cart, check out to reserve stock, and review or cancel orders; administrators manage products, orders, and users. The React app routes users to these flows and calls the Spring REST API through a shared client. The backend separates controllers, business services, repositories, and persistence. The README documents SMS-code verification and mock SMS delivery; sampled code confirms registration/reset SMS dispatch and order inventory synchronization. Some frontend page-to-context wiring and security-filter internals were not sampled, so those links are omitted.

Main entry points: [`frontend/src/api/client.js`](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/frontend/src/api/client.js) (API Client), [`frontend/src/App.jsx`](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/frontend/src/App.jsx) (Route App), [`backend/src/main/java/org/store/store/service/OrderService.java`](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/service/OrderService.java) (Order Service), [`backend/src/main/java/org/store/store/controller/AuthController.java`](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/controller/AuthController.java) (Auth Controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Storefront"]
  node_app["Route App<br/>[App.jsx]"]
  node_catalogpages["Catalog Pages<br/>[Products.jsx]"]
  node_detailpage["Product Detail<br/>[ProductDetail.jsx]"]
  node_cartcontext["Cart State<br/>[CartContext.jsx]"]
  node_cartpage["Cart and Checkout<br/>[Cart.jsx]"]
  node_checkoutpage["Checkout Page<br/>[Checkout.jsx]"]
  node_orderspage["Order History<br/>[Orders.jsx]"]
  node_authpages["Account Pages<br/>[Login.jsx]"]
  node_adminpages["Admin Pages<br/>[AdminLayout.jsx]"]
  node_apiclient["API Client<br/>[client.js]"]
end

subgraph group_api["Backend API"]
  node_authcontroller["Auth Controller"]
  node_productcontroller["Product Controller"]
  node_ordercontroller["Order Controller"]
  node_usercontroller["User Controller"]
end

subgraph group_domain["Commerce Services"]
  node_userservice["User Service<br/>[UserService.java]"]
  node_productservice["Product Service"]
  node_orderservice["Order Service<br/>[OrderService.java]"]
  node_sms["Mock SMS<br/>[SmsService.java]"]
end

subgraph group_security["Identity and Security"]
  node_jwtfilter["JWT Filter"]
  node_securityconfig["Security Config"]
  node_ratelimitfilter["Rate Limit Filter"]
  node_ratelimit["Rate Limit Service"]
end

subgraph group_data["Persistence"]
  node_users["User Repository"]
  node_products["Product Repository"]
  node_orders["Order Repository"]
  node_checkouts["Checkout Repository"]
end

node_shopper(("Customer"))
node_admin(("Administrator"))
node_mysql[("MySQL Store")]

node_shopper -->|"uses"| node_app
node_admin -->|"uses"| node_app
node_app -->|"routes"| node_catalogpages
node_app -->|"routes"| node_detailpage
node_app -->|"routes"| node_authpages
node_app -->|"routes"| node_cartpage
node_app -->|"routes"| node_checkoutpage
node_app -->|"routes"| node_orderspage
node_app -->|"routes"| node_adminpages
node_catalogpages -->|"requests"| node_apiclient
node_detailpage -->|"requests"| node_apiclient
node_cartpage -->|"requests"| node_apiclient
node_checkoutpage -->|"requests"| node_apiclient
node_orderspage -->|"requests"| node_apiclient
node_authpages -->|"requests"| node_apiclient
node_adminpages -->|"requests"| node_apiclient
node_apiclient -->|"HTTP requests"| node_authcontroller
node_apiclient -->|"HTTP requests"| node_productcontroller
node_apiclient -->|"HTTP requests"| node_ordercontroller
node_apiclient -->|"HTTP requests"| node_usercontroller
node_authcontroller -->|"registration and reset"| node_userservice
node_authcontroller -->|"loads account details"| node_users
node_authcontroller -->|"issues tokens"| node_jwtfilter
node_userservice -->|"reads and writes"| node_users
node_userservice -->|"sends codes"| node_sms
node_productcontroller -->|"dispatches"| node_productservice
node_productservice -->|"queries and writes"| node_products
node_productservice -->|"syncs pending carts"| node_orderservice
node_ordercontroller -->|"dispatches"| node_orderservice
node_orderservice -->|"reads and writes"| node_orders
node_orderservice -->|"checks stock"| node_products
node_orderservice -->|"checks ownership"| node_users
node_orderservice -->|"persists checkout"| node_checkouts
node_jwtfilter -->|"configured by"| node_securityconfig
node_ratelimitfilter -->|"resolves limits"| node_ratelimit
node_users -->|"persists"| node_mysql
node_products -->|"persists"| node_mysql
node_orders -->|"persists"| node_mysql
node_checkouts -->|"persists"| node_mysql

click node_app "https://github.com/alirezaojani1385/online-store-fullstack/blob/main/frontend/src/App.jsx"
click node_catalogpages "https://github.com/alirezaojani1385/online-store-fullstack/blob/main/frontend/src/pages/Products.jsx"
click node_detailpage "https://github.com/alirezaojani1385/online-store-fullstack/blob/main/frontend/src/pages/ProductDetail.jsx"
click node_cartcontext "https://github.com/alirezaojani1385/online-store-fullstack/blob/main/frontend/src/context/CartContext.jsx"
click node_cartpage "https://github.com/alirezaojani1385/online-store-fullstack/blob/main/frontend/src/pages/Cart.jsx"
click node_checkoutpage "https://github.com/alirezaojani1385/online-store-fullstack/blob/main/frontend/src/pages/Checkout.jsx"
click node_orderspage "https://github.com/alirezaojani1385/online-store-fullstack/blob/main/frontend/src/pages/Orders.jsx"
click node_authpages "https://github.com/alirezaojani1385/online-store-fullstack/blob/main/frontend/src/pages/Login.jsx"
click node_adminpages "https://github.com/alirezaojani1385/online-store-fullstack/blob/main/frontend/src/pages/admin/AdminLayout.jsx"
click node_apiclient "https://github.com/alirezaojani1385/online-store-fullstack/blob/main/frontend/src/api/client.js"
click node_authcontroller "https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/controller/AuthController.java"
click node_productcontroller "https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/controller/ProductController.java"
click node_ordercontroller "https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/controller/OrderController.java"
click node_usercontroller "https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/controller/UserController.java"
click node_userservice "https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/service/UserService.java"
click node_productservice "https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/service/ProductService.java"
click node_orderservice "https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/service/OrderService.java"
click node_sms "https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/service/SmsService.java"
click node_jwtfilter "https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/security/JwtAuthenticationFilter.java"
click node_securityconfig "https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/security/SecurityConfig.java"
click node_ratelimitfilter "https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/security/RateLimitingFilter.java"
click node_ratelimit "https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/security/RateLimitingService.java"
click node_users "https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/repository/UserRepository.java"
click node_products "https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/repository/ProductRepository.java"
click node_orders "https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/repository/OrderRepository.java"
click node_checkouts "https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/repository/CheckoutRepository.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_catalogpages,node_detailpage,node_cartcontext,node_cartpage,node_checkoutpage,node_orderspage,node_authpages,node_adminpages,node_apiclient toneBlue
class node_authcontroller,node_productcontroller,node_ordercontroller,node_usercontroller,node_mysql toneAmber
class node_userservice,node_productservice,node_orderservice,node_sms toneMint
class node_jwtfilter,node_securityconfig,node_ratelimitfilter,node_ratelimit toneRose
class node_users,node_products,node_orders,node_checkouts,node_shopper,node_admin toneIndigo
```

## Components

### Storefront

- [Route App](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Catalog Pages](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/frontend/src/pages/Products.jsx): `frontend/src/pages/Products.jsx`
- [Product Detail](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/frontend/src/pages/ProductDetail.jsx): `frontend/src/pages/ProductDetail.jsx`
- [Cart State](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/frontend/src/context/CartContext.jsx): `frontend/src/context/CartContext.jsx`
- [Cart and Checkout](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/frontend/src/pages/Cart.jsx): `frontend/src/pages/Cart.jsx`
- [Checkout Page](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/frontend/src/pages/Checkout.jsx): `frontend/src/pages/Checkout.jsx`
- [Order History](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/frontend/src/pages/Orders.jsx): `frontend/src/pages/Orders.jsx`
- [Account Pages](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/frontend/src/pages/Login.jsx): `frontend/src/pages/Login.jsx`
- [Admin Pages](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/frontend/src/pages/admin/AdminLayout.jsx): `frontend/src/pages/admin/AdminLayout.jsx`
- [API Client](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/frontend/src/api/client.js): `frontend/src/api/client.js`

### Backend API

- [Auth Controller](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/controller/AuthController.java): `backend/src/main/java/org/store/store/controller/AuthController.java`
- [Product Controller](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/controller/ProductController.java): `backend/src/main/java/org/store/store/controller/ProductController.java`
- [Order Controller](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/controller/OrderController.java): `backend/src/main/java/org/store/store/controller/OrderController.java`
- [User Controller](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/controller/UserController.java): `backend/src/main/java/org/store/store/controller/UserController.java`

### Commerce Services

- [User Service](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/service/UserService.java): `backend/src/main/java/org/store/store/service/UserService.java`
- [Product Service](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/service/ProductService.java): `backend/src/main/java/org/store/store/service/ProductService.java`
- [Order Service](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/service/OrderService.java): `backend/src/main/java/org/store/store/service/OrderService.java`
- [Mock SMS](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/service/SmsService.java): `backend/src/main/java/org/store/store/service/SmsService.java`

### Identity and Security

- [JWT Filter](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/security/JwtAuthenticationFilter.java): `backend/src/main/java/org/store/store/security/JwtAuthenticationFilter.java`
- [Security Config](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/security/SecurityConfig.java): `backend/src/main/java/org/store/store/security/SecurityConfig.java`
- [Rate Limit Filter](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/security/RateLimitingFilter.java): `backend/src/main/java/org/store/store/security/RateLimitingFilter.java`
- [Rate Limit Service](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/security/RateLimitingService.java): `backend/src/main/java/org/store/store/security/RateLimitingService.java`

### Persistence

- [User Repository](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/repository/UserRepository.java): `backend/src/main/java/org/store/store/repository/UserRepository.java`
- [Product Repository](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/repository/ProductRepository.java): `backend/src/main/java/org/store/store/repository/ProductRepository.java`
- [Order Repository](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/repository/OrderRepository.java): `backend/src/main/java/org/store/store/repository/OrderRepository.java`
- [Checkout Repository](https://github.com/alirezaojani1385/online-store-fullstack/blob/main/backend/src/main/java/org/store/store/repository/CheckoutRepository.java): `backend/src/main/java/org/store/store/repository/CheckoutRepository.java`

### Other components

- **Customer**
- **Administrator**
- **MySQL Store**

## Connections

- Customer → Route App: uses
- Administrator → Route App: uses
- Route App → Catalog Pages: routes
- Route App → Product Detail: routes
- Route App → Account Pages: routes
- Route App → Cart and Checkout: routes
- Route App → Checkout Page: routes
- Route App → Order History: routes
- Route App → Admin Pages: routes
- Catalog Pages → API Client: requests
- Product Detail → API Client: requests
- Cart and Checkout → API Client: requests
- Checkout Page → API Client: requests
- Order History → API Client: requests
- Account Pages → API Client: requests
- Admin Pages → API Client: requests
- API Client → Auth Controller: HTTP requests
- API Client → Product Controller: HTTP requests
- API Client → Order Controller: HTTP requests
- API Client → User Controller: HTTP requests
- Auth Controller → User Service: registration and reset
- Auth Controller → User Repository: loads account details
- Auth Controller → JWT Filter: issues tokens
- User Service → User Repository: reads and writes
- User Service → Mock SMS: sends codes
- Product Controller → Product Service: dispatches
- Product Service → Product Repository: queries and writes
- Product Service → Order Service: syncs pending carts
- Order Controller → Order Service: dispatches
- Order Service → Order Repository: reads and writes
- Order Service → Product Repository: checks stock
- Order Service → User Repository: checks ownership
- Order Service → Checkout Repository: persists checkout
- JWT Filter → Security Config: configured by
- Rate Limit Filter → Rate Limit Service: resolves limits
- User Repository → MySQL Store: persists
- Product Repository → MySQL Store: persists
- Order Repository → MySQL Store: persists
- Checkout Repository → MySQL Store: persists
