# shaorankun/mini-product-system architecture

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

- Interactive diagram: https://gitdiagram.com/shaorankun/mini-product-system
- Repository: https://github.com/shaorankun/mini-product-system

## Overview

This is a microservices storefront with Angular sign-in and product browsing, JWT-based identity, user administration, product catalog management (including versions and stock), and a per-user cart. The principal workflow is authentication, browsing products, then adding or removing cart items; cart changes publish events that adjust catalog stock. Sampled service code establishes the internal calls and persistence paths below. The README is empty, and gateway routing, frontend API clients, and infrastructure configuration were not sampled, so their wiring is left unspecified.

Main entry points: [`api-gateway/src/main/java/com/training/api_gateway/filter/JwtAuthFilter.java`](https://github.com/shaorankun/mini-product-system/blob/main/api-gateway/src/main/java/com/training/api_gateway/filter/JwtAuthFilter.java) (API gateway), [`cart-service/src/main/java/com/training/cart_service/service/CartService.java`](https://github.com/shaorankun/mini-product-system/blob/main/cart-service/src/main/java/com/training/cart_service/service/CartService.java) (Cart service), [`product-service/src/main/java/com/training/product_service/service/ProductService.java`](https://github.com/shaorankun/mini-product-system/blob/main/product-service/src/main/java/com/training/product_service/service/ProductService.java) (Product service), [`user-service/src/main/java/com/training/user_service/service/UserService.java`](https://github.com/shaorankun/mini-product-system/blob/main/user-service/src/main/java/com/training/user_service/service/UserService.java) (User service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Client"]
  node_frontend["Angular storefront<br/>[app.routes.ts]"]
end

subgraph group_identity["Identity and users"]
  node_auth_api["Auth endpoints"]
  node_auth_logic["Auth service<br/>[AuthService.java]"]
  node_user_client["User service client"]
  node_user_internal["Internal user API"]
  node_user_api["Profile and admin APIs"]
  node_user_logic["User service<br/>[UserService.java]"]
  node_user_store[("User records")]
end

subgraph group_commerce["Catalog and cart"]
  node_product_api["Product endpoints"]
  node_product_logic["Product service"]
  node_product_repo["Product repository"]
  node_product_queries["Public product queries"]
  node_product_store[("MongoDB products<br/>[Product.java]")]
  node_cart_api["Cart endpoints"]
  node_cart_logic["Cart service<br/>[CartService.java]"]
  node_cart_store[("Cart items")]
  node_product_client["Product service client"]
end

subgraph group_platform["Gateway and messaging"]
  node_gateway["API gateway<br/>[JwtAuthFilter.java]"]
  node_event_publisher["Cart event publisher"]
  node_event_queue["SQS event queue"]
  node_event_listener["Cart event listener"]
end

node_shopper(("Shopper"))

node_shopper -->|"uses"| node_frontend
node_frontend -.->|"API requests"| node_gateway
node_gateway -.->|"routes requests"| node_auth_api
node_gateway -.->|"routes requests"| node_product_api
node_gateway -.->|"routes requests"| node_cart_api
node_gateway -.->|"routes requests"| node_user_api
node_auth_api -->|"invokes"| node_auth_logic
node_auth_logic -->|"requests user data"| node_user_client
node_user_client -->|"calls"| node_user_internal
node_user_internal -->|"invokes"| node_user_logic
node_user_api -->|"invokes"| node_user_logic
node_user_logic -->|"reads and writes"| node_user_store
node_product_api -->|"invokes"| node_product_logic
node_product_logic -->|"reads and writes"| node_product_repo
node_product_logic -->|"queries public listings"| node_product_queries
node_product_repo -->|"persists products"| node_product_store
node_product_queries -->|"aggregates listings"| node_product_store
node_cart_api -->|"invokes"| node_cart_logic
node_cart_logic -->|"reads and writes"| node_cart_store
node_cart_logic -->|"checks stock and fetches details"| node_product_client
node_product_client -->|"calls"| node_product_api
node_cart_logic -->|"publishes cart changes"| node_event_publisher
node_event_publisher -->|"sends events"| node_event_queue
node_event_queue -->|"delivers events"| node_event_listener
node_event_listener -->|"adjusts stock"| node_product_logic

click node_frontend "https://github.com/shaorankun/mini-product-system/blob/main/frontend/src/app/app.routes.ts"
click node_gateway "https://github.com/shaorankun/mini-product-system/blob/main/api-gateway/src/main/java/com/training/api_gateway/filter/JwtAuthFilter.java"
click node_auth_api "https://github.com/shaorankun/mini-product-system/blob/main/auth-service/src/main/java/com/training/auth_service/controller/AuthController.java"
click node_auth_logic "https://github.com/shaorankun/mini-product-system/blob/main/auth-service/src/main/java/com/training/auth_service/service/AuthService.java"
click node_user_client "https://github.com/shaorankun/mini-product-system/blob/main/auth-service/src/main/java/com/training/auth_service/client/UserServiceClient.java"
click node_user_internal "https://github.com/shaorankun/mini-product-system/blob/main/user-service/src/main/java/com/training/user_service/controller/UserInternalController.java"
click node_user_api "https://github.com/shaorankun/mini-product-system/blob/main/user-service/src/main/java/com/training/user_service/controller/UserController.java"
click node_user_logic "https://github.com/shaorankun/mini-product-system/blob/main/user-service/src/main/java/com/training/user_service/service/UserService.java"
click node_user_store "https://github.com/shaorankun/mini-product-system/blob/main/user-service/src/main/java/com/training/user_service/repository/UserRepository.java"
click node_product_api "https://github.com/shaorankun/mini-product-system/blob/main/product-service/src/main/java/com/training/product_service/controller/ProductController.java"
click node_product_logic "https://github.com/shaorankun/mini-product-system/blob/main/product-service/src/main/java/com/training/product_service/service/ProductService.java"
click node_product_repo "https://github.com/shaorankun/mini-product-system/blob/main/product-service/src/main/java/com/training/product_service/repository/ProductRepository.java"
click node_product_queries "https://github.com/shaorankun/mini-product-system/blob/main/product-service/src/main/java/com/training/product_service/repository/ProductQueryRepository.java"
click node_product_store "https://github.com/shaorankun/mini-product-system/blob/main/product-service/src/main/java/com/training/product_service/model/Product.java"
click node_cart_api "https://github.com/shaorankun/mini-product-system/blob/main/cart-service/src/main/java/com/training/cart_service/controller/CartController.java"
click node_cart_logic "https://github.com/shaorankun/mini-product-system/blob/main/cart-service/src/main/java/com/training/cart_service/service/CartService.java"
click node_cart_store "https://github.com/shaorankun/mini-product-system/blob/main/cart-service/src/main/java/com/training/cart_service/repository/CartItemRepository.java"
click node_product_client "https://github.com/shaorankun/mini-product-system/blob/main/cart-service/src/main/java/com/training/cart_service/client/ProductServiceClient.java"
click node_event_publisher "https://github.com/shaorankun/mini-product-system/blob/main/cart-service/src/main/java/com/training/cart_service/messaging/SqsEventPublisher.java"
click node_event_listener "https://github.com/shaorankun/mini-product-system/blob/main/product-service/src/main/java/com/training/product_service/messaging/CartEventListener.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_frontend toneBlue
class node_auth_api,node_auth_logic,node_user_client,node_user_internal,node_user_api,node_user_logic,node_user_store toneAmber
class node_product_api,node_product_logic,node_product_repo,node_product_queries,node_product_store,node_cart_api,node_cart_logic,node_cart_store,node_product_client toneMint
class node_gateway,node_event_publisher,node_event_queue,node_event_listener toneRose
class node_shopper toneIndigo
```

## Components

### Client

- [Angular storefront](https://github.com/shaorankun/mini-product-system/blob/main/frontend/src/app/app.routes.ts): `frontend/src/app/app.routes.ts`

### Identity and users

- [Auth endpoints](https://github.com/shaorankun/mini-product-system/blob/main/auth-service/src/main/java/com/training/auth_service/controller/AuthController.java): `auth-service/src/main/java/com/training/auth_service/controller/AuthController.java`
- [Auth service](https://github.com/shaorankun/mini-product-system/blob/main/auth-service/src/main/java/com/training/auth_service/service/AuthService.java): `auth-service/src/main/java/com/training/auth_service/service/AuthService.java`
- [User service client](https://github.com/shaorankun/mini-product-system/blob/main/auth-service/src/main/java/com/training/auth_service/client/UserServiceClient.java): `auth-service/src/main/java/com/training/auth_service/client/UserServiceClient.java`
- [Internal user API](https://github.com/shaorankun/mini-product-system/blob/main/user-service/src/main/java/com/training/user_service/controller/UserInternalController.java): `user-service/src/main/java/com/training/user_service/controller/UserInternalController.java`
- [Profile and admin APIs](https://github.com/shaorankun/mini-product-system/blob/main/user-service/src/main/java/com/training/user_service/controller/UserController.java): `user-service/src/main/java/com/training/user_service/controller/UserController.java`
- [User service](https://github.com/shaorankun/mini-product-system/blob/main/user-service/src/main/java/com/training/user_service/service/UserService.java): `user-service/src/main/java/com/training/user_service/service/UserService.java`
- [User records](https://github.com/shaorankun/mini-product-system/blob/main/user-service/src/main/java/com/training/user_service/repository/UserRepository.java): `user-service/src/main/java/com/training/user_service/repository/UserRepository.java`

### Catalog and cart

- [Product endpoints](https://github.com/shaorankun/mini-product-system/blob/main/product-service/src/main/java/com/training/product_service/controller/ProductController.java): `product-service/src/main/java/com/training/product_service/controller/ProductController.java`
- [Product service](https://github.com/shaorankun/mini-product-system/blob/main/product-service/src/main/java/com/training/product_service/service/ProductService.java): `product-service/src/main/java/com/training/product_service/service/ProductService.java`
- [Product repository](https://github.com/shaorankun/mini-product-system/blob/main/product-service/src/main/java/com/training/product_service/repository/ProductRepository.java): `product-service/src/main/java/com/training/product_service/repository/ProductRepository.java`
- [Public product queries](https://github.com/shaorankun/mini-product-system/blob/main/product-service/src/main/java/com/training/product_service/repository/ProductQueryRepository.java): `product-service/src/main/java/com/training/product_service/repository/ProductQueryRepository.java`
- [MongoDB products](https://github.com/shaorankun/mini-product-system/blob/main/product-service/src/main/java/com/training/product_service/model/Product.java): `product-service/src/main/java/com/training/product_service/model/Product.java`
- [Cart endpoints](https://github.com/shaorankun/mini-product-system/blob/main/cart-service/src/main/java/com/training/cart_service/controller/CartController.java): `cart-service/src/main/java/com/training/cart_service/controller/CartController.java`
- [Cart service](https://github.com/shaorankun/mini-product-system/blob/main/cart-service/src/main/java/com/training/cart_service/service/CartService.java): `cart-service/src/main/java/com/training/cart_service/service/CartService.java`
- [Cart items](https://github.com/shaorankun/mini-product-system/blob/main/cart-service/src/main/java/com/training/cart_service/repository/CartItemRepository.java): `cart-service/src/main/java/com/training/cart_service/repository/CartItemRepository.java`
- [Product service client](https://github.com/shaorankun/mini-product-system/blob/main/cart-service/src/main/java/com/training/cart_service/client/ProductServiceClient.java): `cart-service/src/main/java/com/training/cart_service/client/ProductServiceClient.java`

### Gateway and messaging

- [API gateway](https://github.com/shaorankun/mini-product-system/blob/main/api-gateway/src/main/java/com/training/api_gateway/filter/JwtAuthFilter.java): `api-gateway/src/main/java/com/training/api_gateway/filter/JwtAuthFilter.java`
- [Cart event publisher](https://github.com/shaorankun/mini-product-system/blob/main/cart-service/src/main/java/com/training/cart_service/messaging/SqsEventPublisher.java): `cart-service/src/main/java/com/training/cart_service/messaging/SqsEventPublisher.java`
- **SQS event queue**
- [Cart event listener](https://github.com/shaorankun/mini-product-system/blob/main/product-service/src/main/java/com/training/product_service/messaging/CartEventListener.java): `product-service/src/main/java/com/training/product_service/messaging/CartEventListener.java`

### Other components

- **Shopper**

## Connections

- Shopper → Angular storefront: uses
- Angular storefront → API gateway: API requests
- API gateway → Auth endpoints: routes requests
- API gateway → Product endpoints: routes requests
- API gateway → Cart endpoints: routes requests
- API gateway → Profile and admin APIs: routes requests
- Auth endpoints → Auth service: invokes
- Auth service → User service client: requests user data
- User service client → Internal user API: calls
- Internal user API → User service: invokes
- Profile and admin APIs → User service: invokes
- User service → User records: reads and writes
- Product endpoints → Product service: invokes
- Product service → Product repository: reads and writes
- Product service → Public product queries: queries public listings
- Product repository → MongoDB products: persists products
- Public product queries → MongoDB products: aggregates listings
- Cart endpoints → Cart service: invokes
- Cart service → Cart items: reads and writes
- Cart service → Product service client: checks stock and fetches details
- Product service client → Product endpoints: calls
- Cart service → Cart event publisher: publishes cart changes
- Cart event publisher → SQS event queue: sends events
- SQS event queue → Cart event listener: delivers events
- Cart event listener → Product service: adjusts stock
