# rangeegnar/hmdp architecture

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

## Overview

This Spring application supports a local-deals workflow: users authenticate, discover shops and vouchers, and participate in social posting and follow feeds or voucher ordering. The sampled code confirms user and blog service calls, shop cache/database access, and blog interactions with user, follow, and Redis data. The tree also identifies comments, uploads, and seckill-order handling as product areas, but their internal wiring was not sampled; those branches are shown conservatively. MySQL, Redis, and file storage represent runtime state or resources, not delivery tooling.

Main entry points: [`src/main/java/com/hmdp/service/impl/BlogServiceImpl.java`](https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/service/impl/BlogServiceImpl.java) (Blog service), [`src/main/java/com/hmdp/service/impl/ShopServiceImpl.java`](https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/service/impl/ShopServiceImpl.java) (Shop service), [`src/main/java/com/hmdp/service/impl/UserServiceImpl.java`](https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/service/impl/UserServiceImpl.java) (User service), [`src/main/java/com/hmdp/controller/UserController.java`](https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/controller/UserController.java) (User API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_identity["Identity"]
  node_user_api["User API"]
  node_user_service["User service"]
  node_user_info["User info service"]
  node_user_store["User data<br/>[UserMapper.java]"]
end

subgraph group_discovery["Shop discovery"]
  node_shop_api["Shop API"]
  node_shop_service["Shop service"]
  node_shop_types["Shop types"]
  node_shop_store["Shop data<br/>[ShopMapper.java]"]
end

subgraph group_social["Social content"]
  node_blog_api["Blog API"]
  node_blog_service["Blog service"]
  node_follow_service["Follow service"]
  node_comments_api["Comments API"]
  node_upload_api["Image upload"]
end

subgraph group_commerce["Vouchers and orders"]
  node_voucher_api["Voucher API"]
  node_voucher_service["Voucher service"]
  node_order_api["Order API"]
  node_order_service["Order service"]
  node_seckill_listener["Seckill listener"]
end

subgraph group_runtime["Runtime infrastructure"]
  node_mysql[("MySQL")]
  node_redis[("Redis")]
  node_cache_client["Cache client<br/>[CacheClient.java]"]
  node_file_storage[("Image files")]
end

node_customer(("Customer"))

node_customer -->|"requests"| node_user_api
node_customer -->|"browses"| node_shop_api
node_customer -->|"posts and reads"| node_blog_api
node_customer -->|"views vouchers"| node_voucher_api
node_customer -->|"places orders"| node_order_api
node_user_api -->|"delegates"| node_user_service
node_user_api -->|"loads profile"| node_user_info
node_user_service -->|"queries users"| node_user_store
node_user_service -->|"stores tokens and signs"| node_redis
node_user_info -->|"accesses profile data"| node_mysql
node_shop_api -->|"delegates"| node_shop_service
node_shop_service -->|"loads shop cache"| node_cache_client
node_cache_client -->|"reads and writes cache"| node_redis
node_shop_service -->|"queries shops"| node_shop_store
node_shop_service -->|"searches geo index"| node_redis
node_shop_types -->|"queries shop types"| node_mysql
node_blog_api -->|"delegates"| node_blog_service
node_blog_service -->|"reads and writes blogs"| node_mysql
node_blog_service -->|"tracks likes and feeds"| node_redis
node_blog_service -->|"loads followers"| node_follow_service
node_blog_service -->|"loads author data"| node_user_service
node_comments_api -.->|"comment data"| node_mysql
node_upload_api -->|"writes and deletes images"| node_file_storage
node_voucher_api -->|"delegates"| node_voucher_service
node_order_api -.->|"delegates"| node_order_service
node_order_service -.->|"order handling"| node_seckill_listener
node_voucher_service -.->|"voucher data"| node_mysql

click node_user_api "https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/controller/UserController.java"
click node_user_service "https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/service/impl/UserServiceImpl.java"
click node_user_info "https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/service/impl/UserInfoServiceImpl.java"
click node_user_store "https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/mapper/UserMapper.java"
click node_shop_api "https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/controller/ShopController.java"
click node_shop_service "https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/service/impl/ShopServiceImpl.java"
click node_shop_types "https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/controller/ShopTypeController.java"
click node_shop_store "https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/mapper/ShopMapper.java"
click node_blog_api "https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/controller/BlogController.java"
click node_blog_service "https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/service/impl/BlogServiceImpl.java"
click node_follow_service "https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/service/impl/FollowServiceImpl.java"
click node_comments_api "https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/controller/BlogCommentsController.java"
click node_upload_api "https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/controller/UploadController.java"
click node_voucher_api "https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/controller/VoucherController.java"
click node_voucher_service "https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/service/impl/VoucherServiceImpl.java"
click node_order_api "https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/controller/VoucherOrderController.java"
click node_order_service "https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/service/impl/VoucherOrderServiceImpl.java"
click node_seckill_listener "https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/listener/SeckillVoucherListener.java"
click node_cache_client "https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/utils/CacheClient.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_user_api,node_user_service,node_user_info,node_user_store toneBlue
class node_shop_api,node_shop_service,node_shop_types,node_shop_store toneAmber
class node_blog_api,node_blog_service,node_follow_service,node_comments_api,node_upload_api toneMint
class node_voucher_api,node_voucher_service,node_order_api,node_order_service,node_seckill_listener toneRose
class node_mysql,node_redis,node_cache_client,node_file_storage,node_customer toneIndigo
```

## Components

### Identity

- [User API](https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/controller/UserController.java): `src/main/java/com/hmdp/controller/UserController.java`
- [User service](https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/service/impl/UserServiceImpl.java): `src/main/java/com/hmdp/service/impl/UserServiceImpl.java`
- [User info service](https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/service/impl/UserInfoServiceImpl.java): `src/main/java/com/hmdp/service/impl/UserInfoServiceImpl.java`
- [User data](https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/mapper/UserMapper.java): `src/main/java/com/hmdp/mapper/UserMapper.java`

### Shop discovery

- [Shop API](https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/controller/ShopController.java): `src/main/java/com/hmdp/controller/ShopController.java`
- [Shop service](https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/service/impl/ShopServiceImpl.java): `src/main/java/com/hmdp/service/impl/ShopServiceImpl.java`
- [Shop types](https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/controller/ShopTypeController.java): `src/main/java/com/hmdp/controller/ShopTypeController.java`
- [Shop data](https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/mapper/ShopMapper.java): `src/main/java/com/hmdp/mapper/ShopMapper.java`

### Social content

- [Blog API](https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/controller/BlogController.java): `src/main/java/com/hmdp/controller/BlogController.java`
- [Blog service](https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/service/impl/BlogServiceImpl.java): `src/main/java/com/hmdp/service/impl/BlogServiceImpl.java`
- [Follow service](https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/service/impl/FollowServiceImpl.java): `src/main/java/com/hmdp/service/impl/FollowServiceImpl.java`
- [Comments API](https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/controller/BlogCommentsController.java): `src/main/java/com/hmdp/controller/BlogCommentsController.java`
- [Image upload](https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/controller/UploadController.java): `src/main/java/com/hmdp/controller/UploadController.java`

### Vouchers and orders

- [Voucher API](https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/controller/VoucherController.java): `src/main/java/com/hmdp/controller/VoucherController.java`
- [Voucher service](https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/service/impl/VoucherServiceImpl.java): `src/main/java/com/hmdp/service/impl/VoucherServiceImpl.java`
- [Order API](https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/controller/VoucherOrderController.java): `src/main/java/com/hmdp/controller/VoucherOrderController.java`
- [Order service](https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/service/impl/VoucherOrderServiceImpl.java): `src/main/java/com/hmdp/service/impl/VoucherOrderServiceImpl.java`
- [Seckill listener](https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/listener/SeckillVoucherListener.java): `src/main/java/com/hmdp/listener/SeckillVoucherListener.java`

### Runtime infrastructure

- **MySQL**
- **Redis**
- [Cache client](https://github.com/rangeegnar/hmdp/blob/main/src/main/java/com/hmdp/utils/CacheClient.java): `src/main/java/com/hmdp/utils/CacheClient.java`
- **Image files**

### Other components

- **Customer**

## Connections

- Customer → User API: requests
- Customer → Shop API: browses
- Customer → Blog API: posts and reads
- Customer → Voucher API: views vouchers
- Customer → Order API: places orders
- User API → User service: delegates
- User API → User info service: loads profile
- User service → User data: queries users
- User service → Redis: stores tokens and signs
- User info service → MySQL: accesses profile data
- Shop API → Shop service: delegates
- Shop service → Cache client: loads shop cache
- Cache client → Redis: reads and writes cache
- Shop service → Shop data: queries shops
- Shop service → Redis: searches geo index
- Shop types → MySQL: queries shop types
- Blog API → Blog service: delegates
- Blog service → MySQL: reads and writes blogs
- Blog service → Redis: tracks likes and feeds
- Blog service → Follow service: loads followers
- Blog service → User service: loads author data
- Comments API → MySQL: comment data
- Image upload → Image files: writes and deletes images
- Voucher API → Voucher service: delegates
- Order API → Order service: delegates
- Order service → Seckill listener: order handling
- Voucher service → MySQL: voucher data
