# java-up-up/damai architecture

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

- Interactive diagram: https://gitdiagram.com/java-up-up/damai
- Repository: https://github.com/java-up-up/damai

## Overview

DAMAI is a high-concurrency ticket-booking microservice system. Its documented user journey runs from browsing programs and selecting seats through ordering, payment, and order lookup; the repository also includes user registration, captcha, rule-based gateway throttling, and shared infrastructure. The graph preserves those major capabilities and key runtime support. Several subsystem connections are documented only in the README; unsampled implementation details and dynamic wiring are not inferred.

Main entry points: [`damai-server/damai-program-service/src/main/java/com/damai/service/ProgramService.java`](https://github.com/java-up-up/damai/blob/main/damai-server/damai-program-service/src/main/java/com/damai/service/ProgramService.java) (Program catalog), [`damai-server/damai-order-service/src/main/java/com/damai/service/OrderService.java`](https://github.com/java-up-up/damai/blob/main/damai-server/damai-order-service/src/main/java/com/damai/service/OrderService.java) (Order lifecycle), [`damai-server/damai-gateway-service/src/main/java/com/damai/service`](https://github.com/java-up-up/damai/tree/main/damai-server/damai-gateway-service/src/main/java/com/damai/service) (API gateway), [`damai-server/damai-user-service/src/main/java/com/damai/service/UserService.java`](https://github.com/java-up-up/damai/blob/main/damai-server/damai-user-service/src/main/java/com/damai/service/UserService.java) (User accounts)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Booking experience"]
  node_web["Vue web app<br/>[main.js]"]
  node_serviceuser(("Ticket buyer"))
end

subgraph group_services["Business services"]
  node_gateway["API gateway"]
  node_user["User accounts<br/>[UserService.java]"]
  node_captcha["Captcha"]
  node_program["Program catalog"]
  node_seats["Seat inventory<br/>[SeatService.java]"]
  node_orders["Order lifecycle<br/>[OrderService.java]"]
  node_payments["Payment and refunds"]
  node_base["Area data<br/>[AreaService.java]"]
  node_search["Search service"]
end

subgraph group_platform["Shared platform"]
  node_clients["Service clients"]
  node_redis[("Redis cache<br/>[RedisCache.java]")]
  node_uid["UID generator<br/>[UidGenerator.java]"]
  node_common["API responses<br/>[ApiResponse.java]"]
  node_codes["Business errors<br/>[BaseCode.java]"]
  node_shared["Common utilities"]
  node_es[("Elasticsearch")]
  node_redisservice[("Redis")]
end

subgraph group_governance["Concurrency and governance"]
  node_customize["Rule management<br/>[RuleService.java]"]
  node_restrict["API throttling"]
  node_delay["Delayed queue"]
  node_locks["Distributed locks"]
  node_streams["Redis streams"]
end

node_customer(("Customer"))

node_customer -->|"browses and books"| node_web
node_web -.->|"sends requests"| node_gateway
node_gateway -.->|"routes requests"| node_user
node_gateway -.->|"routes requests"| node_program
node_gateway -.->|"routes requests"| node_orders
node_gateway -.->|"routes verification"| node_captcha
node_user -.->|"uses verification"| node_captcha
node_customer -->|"browses programs"| node_program
node_customer -->|"selects seats"| node_seats
node_customer -->|"places orders"| node_orders
node_orders -->|"initiates payment"| node_payments
node_customer -->|"queries orders"| node_orders
node_program -->|"gets area data"| node_base
node_program -->|"calls base client"| node_clients
node_orders -->|"calls pay and user clients"| node_clients
node_user -->|"calls base client"| node_clients
node_user -->|"reads and writes"| node_redis
node_program -->|"reads cache"| node_redis
node_customize -->|"stores rule cache"| node_redis
node_restrict -->|"checks limits"| node_redis
node_restrict -.->|"loads rules"| node_customize
node_orders -->|"generates identifiers"| node_uid
node_program -->|"generates identifiers"| node_uid
node_user -->|"generates identifiers"| node_uid
node_orders -->|"locks order updates"| node_locks
node_program -->|"pushes messages"| node_streams
node_program -.->|"supports search"| node_search
node_search -->|"indexes and searches"| node_es
node_redis -->|"stores data"| node_redisservice
node_serviceuser -->|"receives order outcome"| node_orders

click node_web "https://github.com/java-up-up/damai/blob/main/vue3/src/main.js"
click node_gateway "https://github.com/java-up-up/damai/tree/main/damai-server/damai-gateway-service/src/main/java/com/damai/service"
click node_user "https://github.com/java-up-up/damai/blob/main/damai-server/damai-user-service/src/main/java/com/damai/service/UserService.java"
click node_captcha "https://github.com/java-up-up/damai/blob/main/damai-captcha-manage-framework/damai-captcha-framework/src/main/java/com/damai/controller/CaptchaController.java"
click node_program "https://github.com/java-up-up/damai/blob/main/damai-server/damai-program-service/src/main/java/com/damai/service/ProgramService.java"
click node_seats "https://github.com/java-up-up/damai/blob/main/damai-server/damai-program-service/src/main/java/com/damai/service/SeatService.java"
click node_orders "https://github.com/java-up-up/damai/blob/main/damai-server/damai-order-service/src/main/java/com/damai/service/OrderService.java"
click node_payments "https://github.com/java-up-up/damai/tree/main/damai-server/damai-pay-service/src/main/java/com/damai/service"
click node_base "https://github.com/java-up-up/damai/blob/main/damai-server/damai-base-data-service/src/main/java/com/damai/service/AreaService.java"
click node_customize "https://github.com/java-up-up/damai/blob/main/damai-server/damai-customize-service/src/main/java/com/damai/service/RuleService.java"
click node_restrict "https://github.com/java-up-up/damai/blob/main/damai-server/damai-gateway-service/src/main/java/com/damai/service/ApiRestrictService.java"
click node_delay "https://github.com/java-up-up/damai/tree/main/damai-redisson-framework/damai-service-delay-queue-framework/src/main/java/com/damai/core"
click node_search "https://github.com/java-up-up/damai/blob/main/damai-elasticsearch-framework/src/main/java/com/damai/util/BusinessEsHandle.java"
click node_clients "https://github.com/java-up-up/damai/tree/main/damai-server-client"
click node_redis "https://github.com/java-up-up/damai/blob/main/damai-redis-tool-framework/damai-redis-framework/src/main/java/com/damai/redis/RedisCache.java"
click node_uid "https://github.com/java-up-up/damai/blob/main/damai-id-generator-framework/src/main/java/com/baidu/fsg/uid/UidGenerator.java"
click node_common "https://github.com/java-up-up/damai/blob/main/damai-common/src/main/java/com/damai/common/ApiResponse.java"
click node_codes "https://github.com/java-up-up/damai/blob/main/damai-common/src/main/java/com/damai/enums/BaseCode.java"
click node_shared "https://github.com/java-up-up/damai/tree/main/damai-common/src/main/java/com/damai/util"
click node_locks "https://github.com/java-up-up/damai/tree/main/damai-redisson-framework/damai-redisson-service-framework/damai-service-lock-framework/src/main/java/com/damai/servicelock"
click node_streams "https://github.com/java-up-up/damai/tree/main/damai-redis-tool-framework/damai-redis-stream-framework/src/main/java/com/damai"

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_web,node_serviceuser toneBlue
class node_gateway,node_user,node_captcha,node_program,node_seats,node_orders,node_payments,node_base,node_search toneAmber
class node_clients,node_redis,node_uid,node_common,node_codes,node_shared,node_es,node_redisservice toneMint
class node_customize,node_restrict,node_delay,node_locks,node_streams toneRose
class node_customer toneIndigo
```

## Components

### Booking experience

- [Vue web app](https://github.com/java-up-up/damai/blob/main/vue3/src/main.js): `vue3/src/main.js`
- **Ticket buyer**

### Business services

- [API gateway](https://github.com/java-up-up/damai/tree/main/damai-server/damai-gateway-service/src/main/java/com/damai/service): `damai-server/damai-gateway-service/src/main/java/com/damai/service`
- [User accounts](https://github.com/java-up-up/damai/blob/main/damai-server/damai-user-service/src/main/java/com/damai/service/UserService.java): `damai-server/damai-user-service/src/main/java/com/damai/service/UserService.java`
- [Captcha](https://github.com/java-up-up/damai/blob/main/damai-captcha-manage-framework/damai-captcha-framework/src/main/java/com/damai/controller/CaptchaController.java): `damai-captcha-manage-framework/damai-captcha-framework/src/main/java/com/damai/controller/CaptchaController.java`
- [Program catalog](https://github.com/java-up-up/damai/blob/main/damai-server/damai-program-service/src/main/java/com/damai/service/ProgramService.java): `damai-server/damai-program-service/src/main/java/com/damai/service/ProgramService.java`
- [Seat inventory](https://github.com/java-up-up/damai/blob/main/damai-server/damai-program-service/src/main/java/com/damai/service/SeatService.java): `damai-server/damai-program-service/src/main/java/com/damai/service/SeatService.java`
- [Order lifecycle](https://github.com/java-up-up/damai/blob/main/damai-server/damai-order-service/src/main/java/com/damai/service/OrderService.java): `damai-server/damai-order-service/src/main/java/com/damai/service/OrderService.java`
- [Payment and refunds](https://github.com/java-up-up/damai/tree/main/damai-server/damai-pay-service/src/main/java/com/damai/service): `damai-server/damai-pay-service/src/main/java/com/damai/service`
- [Area data](https://github.com/java-up-up/damai/blob/main/damai-server/damai-base-data-service/src/main/java/com/damai/service/AreaService.java): `damai-server/damai-base-data-service/src/main/java/com/damai/service/AreaService.java`
- [Search service](https://github.com/java-up-up/damai/blob/main/damai-elasticsearch-framework/src/main/java/com/damai/util/BusinessEsHandle.java): `damai-elasticsearch-framework/src/main/java/com/damai/util/BusinessEsHandle.java`

### Shared platform

- [Service clients](https://github.com/java-up-up/damai/tree/main/damai-server-client): `damai-server-client`
- [Redis cache](https://github.com/java-up-up/damai/blob/main/damai-redis-tool-framework/damai-redis-framework/src/main/java/com/damai/redis/RedisCache.java): `damai-redis-tool-framework/damai-redis-framework/src/main/java/com/damai/redis/RedisCache.java`
- [UID generator](https://github.com/java-up-up/damai/blob/main/damai-id-generator-framework/src/main/java/com/baidu/fsg/uid/UidGenerator.java): `damai-id-generator-framework/src/main/java/com/baidu/fsg/uid/UidGenerator.java`
- [API responses](https://github.com/java-up-up/damai/blob/main/damai-common/src/main/java/com/damai/common/ApiResponse.java): `damai-common/src/main/java/com/damai/common/ApiResponse.java`
- [Business errors](https://github.com/java-up-up/damai/blob/main/damai-common/src/main/java/com/damai/enums/BaseCode.java): `damai-common/src/main/java/com/damai/enums/BaseCode.java`
- [Common utilities](https://github.com/java-up-up/damai/tree/main/damai-common/src/main/java/com/damai/util): `damai-common/src/main/java/com/damai/util`
- **Elasticsearch**
- **Redis**

### Concurrency and governance

- [Rule management](https://github.com/java-up-up/damai/blob/main/damai-server/damai-customize-service/src/main/java/com/damai/service/RuleService.java): `damai-server/damai-customize-service/src/main/java/com/damai/service/RuleService.java`
- [API throttling](https://github.com/java-up-up/damai/blob/main/damai-server/damai-gateway-service/src/main/java/com/damai/service/ApiRestrictService.java): `damai-server/damai-gateway-service/src/main/java/com/damai/service/ApiRestrictService.java`
- [Delayed queue](https://github.com/java-up-up/damai/tree/main/damai-redisson-framework/damai-service-delay-queue-framework/src/main/java/com/damai/core): `damai-redisson-framework/damai-service-delay-queue-framework/src/main/java/com/damai/core`
- [Distributed locks](https://github.com/java-up-up/damai/tree/main/damai-redisson-framework/damai-redisson-service-framework/damai-service-lock-framework/src/main/java/com/damai/servicelock): `damai-redisson-framework/damai-redisson-service-framework/damai-service-lock-framework/src/main/java/com/damai/servicelock`
- [Redis streams](https://github.com/java-up-up/damai/tree/main/damai-redis-tool-framework/damai-redis-stream-framework/src/main/java/com/damai): `damai-redis-tool-framework/damai-redis-stream-framework/src/main/java/com/damai`

### Other components

- **Customer**

## Connections

- Customer → Vue web app: browses and books (evidence: `README.md`)
- Vue web app → API gateway: sends requests
- API gateway → User accounts: routes requests
- API gateway → Program catalog: routes requests
- API gateway → Order lifecycle: routes requests
- API gateway → Captcha: routes verification
- User accounts → Captcha: uses verification
- Customer → Program catalog: browses programs (evidence: `README.md`)
- Customer → Seat inventory: selects seats (evidence: `README.md`)
- Customer → Order lifecycle: places orders (evidence: `README.md`)
- Order lifecycle → Payment and refunds: initiates payment (evidence: `README.md`)
- Customer → Order lifecycle: queries orders (evidence: `README.md`)
- Program catalog → Area data: gets area data (evidence: `damai-server/damai-program-service/src/main/java/com/damai/service/ProgramService.java`)
- Program catalog → Service clients: calls base client (evidence: `damai-server/damai-program-service/src/main/java/com/damai/service/ProgramService.java`)
- Order lifecycle → Service clients: calls pay and user clients (evidence: `damai-server/damai-order-service/src/main/java/com/damai/service/OrderService.java`)
- User accounts → Service clients: calls base client (evidence: `damai-server/damai-user-service/src/main/java/com/damai/service/UserService.java`)
- User accounts → Redis cache: reads and writes (evidence: `damai-server/damai-user-service/src/main/java/com/damai/service/UserService.java`)
- Program catalog → Redis cache: reads cache (evidence: `damai-server/damai-program-service/src/main/java/com/damai/service/ProgramService.java`)
- Rule management → Redis cache: stores rule cache (evidence: `damai-server/damai-customize-service/src/main/java/com/damai/service/RuleService.java`)
- API throttling → Redis cache: checks limits (evidence: `damai-server/damai-gateway-service/src/main/java/com/damai/service/ApiRestrictService.java`)
- API throttling → Rule management: loads rules
- Order lifecycle → UID generator: generates identifiers (evidence: `damai-server/damai-order-service/src/main/java/com/damai/service/OrderService.java`)
- Program catalog → UID generator: generates identifiers (evidence: `damai-server/damai-program-service/src/main/java/com/damai/service/ProgramService.java`)
- User accounts → UID generator: generates identifiers (evidence: `damai-server/damai-user-service/src/main/java/com/damai/service/UserService.java`)
- Order lifecycle → Distributed locks: locks order updates (evidence: `damai-server/damai-order-service/src/main/java/com/damai/service/OrderService.java`)
- Program catalog → Redis streams: pushes messages (evidence: `damai-server/damai-program-service/src/main/java/com/damai/service/ProgramService.java`)
- Program catalog → Search service: supports search
- Search service → Elasticsearch: indexes and searches (evidence: `README.md`)
- Redis cache → Redis: stores data (evidence: `README.md`)
- Ticket buyer → Order lifecycle: receives order outcome (evidence: `README.md`)
