# singhdhairya17/spring-next-store architecture

> Architecture diagram of the GitHub repository singhdhairya17/spring-next-store, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/singhdhairya17/spring-next-store
- Repository: https://github.com/singhdhairya17/spring-next-store

## Overview

Spring Next Store is a full-stack e-commerce demo: a Next.js storefront and admin UI use a Spring Boot REST API backed by JPA/MySQL. The shopper workflow spans catalog browsing, cart, authentication, and order confirmation; the admin branch covers catalog maintenance and dashboard metrics. The README documents the frontend-to-API connection and major capabilities; sampled backend sources confirm several service and persistence calls, while frontend action wiring and unsampled API internals are represented only where documented.

Main entry points: [`e-commerce/src/main/java/com/dhairyasingh/ecommerce/service/ProductService.java`](https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/service/ProductService.java) (Product service), [`e-commerce/src/main/java/com/dhairyasingh/ecommerce/service/CategoryService.java`](https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/service/CategoryService.java) (Category service), [`frontend-ecommerce/src/app/(admin)/admin/(dashboard)/page.tsx`](https://github.com/singhdhairya17/spring-next-store/blob/main/frontend-ecommerce/src/app/(admin)/admin/(dashboard)/page.tsx) (Admin routes), [`frontend-ecommerce/src/app/(user)/page.tsx`](https://github.com/singhdhairya17/spring-next-store/blob/main/frontend-ecommerce/src/app/(user)/page.tsx) (Shop routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_storefront["Storefront"]
  node_shop["Shop routes<br/>[page.tsx]"]
  node_catalog["Catalog actions<br/>[product.ts]"]
  node_category_ui["Category routes<br/>[page.tsx]"]
  node_cart["Cart and checkout<br/>[page.tsx]"]
  node_auth_ui["Sign-in and signup<br/>[auth.ts]"]
  node_browser_cart[("Browser cart")]
end

subgraph group_admin["Admin"]
  node_admin_ui["Admin routes<br/>[page.tsx]"]
  node_admin_products["Product actions<br/>[product.ts]"]
  node_admin_categories["Category actions<br/>[category.ts]"]
  node_admin_stats["Metrics actions<br/>[stats.ts]"]
end

subgraph group_api["Spring API"]
  node_auth_api["Auth endpoints"]
  node_product_api["Product endpoints"]
  node_category_api["Category endpoints"]
  node_order_api["Order endpoints"]
  node_admin_product_api["Admin products"]
  node_admin_category_api["Admin categories"]
  node_stats_api["Admin metrics"]
  node_security{{"JWT security"}}
end

subgraph group_domain["Commerce Services"]
  node_user_service["User service<br/>[UserService.java]"]
  node_product_service["Product service"]
  node_category_service["Category service"]
  node_order_service["Order service<br/>[OrderService.java]"]
  node_stats_service["Stats service<br/>[StatsService.java]"]
  node_file_storage["Upload storage<br/>[FileSystem.java]"]
  node_role_service["Role service<br/>[RoleService.java]"]
end

subgraph group_persistence["Persistence"]
  node_product_repo["Product repository"]
  node_category_repo["Category repository"]
  node_order_repo["Order repository"]
  node_user_repo["User repository"]
  node_role_repo["Role repository"]
end

node_shopper(("Shopper"))
node_mysql[("MySQL database")]
node_upload_fs[("Upload filesystem")]

node_shopper -->|"browses"| node_shop
node_shop -.->|"loads catalog"| node_catalog
node_shop -->|"opens categories"| node_category_ui
node_shopper -->|"checks out"| node_cart
node_cart -.->|"stores cart"| node_browser_cart
node_shopper -->|"authenticates"| node_auth_ui
node_admin_ui -.->|"manages products"| node_admin_products
node_admin_ui -.->|"manages categories"| node_admin_categories
node_admin_ui -.->|"views metrics"| node_admin_stats
node_catalog -.->|"requests products"| node_product_api
node_category_ui -.->|"requests categories"| node_category_api
node_cart -.->|"confirms order"| node_order_api
node_auth_ui -.->|"submits credentials"| node_auth_api
node_admin_products -.->|"sends changes"| node_admin_product_api
node_admin_categories -.->|"sends changes"| node_admin_category_api
node_admin_stats -.->|"requests totals"| node_stats_api
node_auth_api -->|"calls"| node_user_service
node_auth_api -->|"issues JWT"| node_security
node_product_api -->|"calls"| node_product_service
node_category_api -->|"calls"| node_category_service
node_order_api -->|"saves order"| node_order_service
node_order_api -->|"looks up products"| node_product_service
node_admin_product_api -->|"calls"| node_product_service
node_admin_category_api -->|"calls"| node_category_service
node_stats_api -->|"calls"| node_stats_service
node_product_service -->|"resolves category"| node_category_service
node_product_service -->|"stores image"| node_file_storage
node_product_service -->|"reads and writes"| node_product_repo
node_category_service -->|"reads and writes"| node_category_repo
node_category_service -->|"updates products"| node_product_repo
node_user_service -->|"reads and writes"| node_user_repo
node_user_service -->|"ensures role"| node_role_service
node_role_service -->|"reads and writes"| node_role_repo
node_order_service -->|"reads and writes"| node_order_repo
node_stats_service -->|"queries totals"| node_order_repo
node_stats_service -->|"counts customers"| node_user_repo
node_product_repo -->|"persists"| node_mysql
node_category_repo -->|"persists"| node_mysql
node_order_repo -->|"persists"| node_mysql
node_user_repo -->|"persists"| node_mysql
node_role_repo -->|"persists"| node_mysql
node_file_storage -->|"writes files"| node_upload_fs

click node_shop "https://github.com/singhdhairya17/spring-next-store/blob/main/frontend-ecommerce/src/app/(user)/page.tsx"
click node_catalog "https://github.com/singhdhairya17/spring-next-store/blob/main/frontend-ecommerce/src/actions/user/product.ts"
click node_category_ui "https://github.com/singhdhairya17/spring-next-store/blob/main/frontend-ecommerce/src/app/(user)/categories/page.tsx"
click node_cart "https://github.com/singhdhairya17/spring-next-store/blob/main/frontend-ecommerce/src/app/(user)/cart/page.tsx"
click node_auth_ui "https://github.com/singhdhairya17/spring-next-store/blob/main/frontend-ecommerce/src/actions/auth.ts"
click node_admin_ui "https://github.com/singhdhairya17/spring-next-store/blob/main/frontend-ecommerce/src/app/(admin)/admin/(dashboard)/page.tsx"
click node_admin_products "https://github.com/singhdhairya17/spring-next-store/blob/main/frontend-ecommerce/src/actions/admin/product.ts"
click node_admin_categories "https://github.com/singhdhairya17/spring-next-store/blob/main/frontend-ecommerce/src/actions/category.ts"
click node_admin_stats "https://github.com/singhdhairya17/spring-next-store/blob/main/frontend-ecommerce/src/actions/stats.ts"
click node_auth_api "https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/controller/AuthController.java"
click node_product_api "https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/controller/ProductController.java"
click node_category_api "https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/controller/CategoryController.java"
click node_order_api "https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/controller/OrderController.java"
click node_admin_product_api "https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/controller/admin/ProductControllerAdmin.java"
click node_admin_category_api "https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/controller/admin/CategoryControllerAdmin.java"
click node_stats_api "https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/controller/admin/StatsController.java"
click node_security "https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/config/SecurityConfig.java"
click node_user_service "https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/service/UserService.java"
click node_product_service "https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/service/ProductService.java"
click node_category_service "https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/service/CategoryService.java"
click node_order_service "https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/service/OrderService.java"
click node_stats_service "https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/service/StatsService.java"
click node_file_storage "https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/service/FileSystem.java"
click node_product_repo "https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/repository/ProductRepository.java"
click node_category_repo "https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/repository/CategoryRepository.java"
click node_order_repo "https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/repository/OrderRepository.java"
click node_user_repo "https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/repository/UserRepository.java"
click node_role_service "https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/service/RoleService.java"
click node_role_repo "https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/repository/RoleRepository.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_shop,node_catalog,node_category_ui,node_cart,node_auth_ui,node_browser_cart toneBlue
class node_admin_ui,node_admin_products,node_admin_categories,node_admin_stats,node_mysql,node_upload_fs toneAmber
class node_auth_api,node_product_api,node_category_api,node_order_api,node_admin_product_api,node_admin_category_api,node_stats_api,node_security toneMint
class node_user_service,node_product_service,node_category_service,node_order_service,node_stats_service,node_file_storage,node_role_service toneRose
class node_product_repo,node_category_repo,node_order_repo,node_user_repo,node_role_repo,node_shopper toneIndigo
```

## Components

### Storefront

- [Shop routes](https://github.com/singhdhairya17/spring-next-store/blob/main/frontend-ecommerce/src/app/(user)/page.tsx): `frontend-ecommerce/src/app/(user)/page.tsx`
- [Catalog actions](https://github.com/singhdhairya17/spring-next-store/blob/main/frontend-ecommerce/src/actions/user/product.ts): `frontend-ecommerce/src/actions/user/product.ts`
- [Category routes](https://github.com/singhdhairya17/spring-next-store/blob/main/frontend-ecommerce/src/app/(user)/categories/page.tsx): `frontend-ecommerce/src/app/(user)/categories/page.tsx`
- [Cart and checkout](https://github.com/singhdhairya17/spring-next-store/blob/main/frontend-ecommerce/src/app/(user)/cart/page.tsx): `frontend-ecommerce/src/app/(user)/cart/page.tsx`
- [Sign-in and signup](https://github.com/singhdhairya17/spring-next-store/blob/main/frontend-ecommerce/src/actions/auth.ts): `frontend-ecommerce/src/actions/auth.ts`
- **Browser cart**

### Admin

- [Admin routes](https://github.com/singhdhairya17/spring-next-store/blob/main/frontend-ecommerce/src/app/(admin)/admin/(dashboard)/page.tsx): `frontend-ecommerce/src/app/(admin)/admin/(dashboard)/page.tsx`
- [Product actions](https://github.com/singhdhairya17/spring-next-store/blob/main/frontend-ecommerce/src/actions/admin/product.ts): `frontend-ecommerce/src/actions/admin/product.ts`
- [Category actions](https://github.com/singhdhairya17/spring-next-store/blob/main/frontend-ecommerce/src/actions/category.ts): `frontend-ecommerce/src/actions/category.ts`
- [Metrics actions](https://github.com/singhdhairya17/spring-next-store/blob/main/frontend-ecommerce/src/actions/stats.ts): `frontend-ecommerce/src/actions/stats.ts`

### Spring API

- [Auth endpoints](https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/controller/AuthController.java): `e-commerce/src/main/java/com/dhairyasingh/ecommerce/controller/AuthController.java`
- [Product endpoints](https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/controller/ProductController.java): `e-commerce/src/main/java/com/dhairyasingh/ecommerce/controller/ProductController.java`
- [Category endpoints](https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/controller/CategoryController.java): `e-commerce/src/main/java/com/dhairyasingh/ecommerce/controller/CategoryController.java`
- [Order endpoints](https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/controller/OrderController.java): `e-commerce/src/main/java/com/dhairyasingh/ecommerce/controller/OrderController.java`
- [Admin products](https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/controller/admin/ProductControllerAdmin.java): `e-commerce/src/main/java/com/dhairyasingh/ecommerce/controller/admin/ProductControllerAdmin.java`
- [Admin categories](https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/controller/admin/CategoryControllerAdmin.java): `e-commerce/src/main/java/com/dhairyasingh/ecommerce/controller/admin/CategoryControllerAdmin.java`
- [Admin metrics](https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/controller/admin/StatsController.java): `e-commerce/src/main/java/com/dhairyasingh/ecommerce/controller/admin/StatsController.java`
- [JWT security](https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/config/SecurityConfig.java): `e-commerce/src/main/java/com/dhairyasingh/ecommerce/config/SecurityConfig.java`

### Commerce Services

- [User service](https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/service/UserService.java): `e-commerce/src/main/java/com/dhairyasingh/ecommerce/service/UserService.java`
- [Product service](https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/service/ProductService.java): `e-commerce/src/main/java/com/dhairyasingh/ecommerce/service/ProductService.java`
- [Category service](https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/service/CategoryService.java): `e-commerce/src/main/java/com/dhairyasingh/ecommerce/service/CategoryService.java`
- [Order service](https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/service/OrderService.java): `e-commerce/src/main/java/com/dhairyasingh/ecommerce/service/OrderService.java`
- [Stats service](https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/service/StatsService.java): `e-commerce/src/main/java/com/dhairyasingh/ecommerce/service/StatsService.java`
- [Upload storage](https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/service/FileSystem.java): `e-commerce/src/main/java/com/dhairyasingh/ecommerce/service/FileSystem.java`
- [Role service](https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/service/RoleService.java): `e-commerce/src/main/java/com/dhairyasingh/ecommerce/service/RoleService.java`

### Persistence

- [Product repository](https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/repository/ProductRepository.java): `e-commerce/src/main/java/com/dhairyasingh/ecommerce/repository/ProductRepository.java`
- [Category repository](https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/repository/CategoryRepository.java): `e-commerce/src/main/java/com/dhairyasingh/ecommerce/repository/CategoryRepository.java`
- [Order repository](https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/repository/OrderRepository.java): `e-commerce/src/main/java/com/dhairyasingh/ecommerce/repository/OrderRepository.java`
- [User repository](https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/repository/UserRepository.java): `e-commerce/src/main/java/com/dhairyasingh/ecommerce/repository/UserRepository.java`
- [Role repository](https://github.com/singhdhairya17/spring-next-store/blob/main/e-commerce/src/main/java/com/dhairyasingh/ecommerce/repository/RoleRepository.java): `e-commerce/src/main/java/com/dhairyasingh/ecommerce/repository/RoleRepository.java`

### Other components

- **Shopper**
- **MySQL database**
- **Upload filesystem**

## Connections

- Shopper → Shop routes: browses
- Shop routes → Catalog actions: loads catalog
- Shop routes → Category routes: opens categories
- Shopper → Cart and checkout: checks out
- Cart and checkout → Browser cart: stores cart
- Shopper → Sign-in and signup: authenticates
- Admin routes → Product actions: manages products
- Admin routes → Category actions: manages categories
- Admin routes → Metrics actions: views metrics
- Catalog actions → Product endpoints: requests products
- Category routes → Category endpoints: requests categories
- Cart and checkout → Order endpoints: confirms order
- Sign-in and signup → Auth endpoints: submits credentials
- Product actions → Admin products: sends changes
- Category actions → Admin categories: sends changes
- Metrics actions → Admin metrics: requests totals
- Auth endpoints → User service: calls
- Auth endpoints → JWT security: issues JWT
- Product endpoints → Product service: calls
- Category endpoints → Category service: calls
- Order endpoints → Order service: saves order
- Order endpoints → Product service: looks up products
- Admin products → Product service: calls
- Admin categories → Category service: calls
- Admin metrics → Stats service: calls
- Product service → Category service: resolves category
- Product service → Upload storage: stores image
- Product service → Product repository: reads and writes
- Category service → Category repository: reads and writes
- Category service → Product repository: updates products
- User service → User repository: reads and writes
- User service → Role service: ensures role
- Role service → Role repository: reads and writes
- Order service → Order repository: reads and writes
- Stats service → Order repository: queries totals
- Stats service → User repository: counts customers
- Product repository → MySQL database: persists
- Category repository → MySQL database: persists
- Order repository → MySQL database: persists
- User repository → MySQL database: persists
- Role repository → MySQL database: persists
- Upload storage → Upload filesystem: writes files
