# good-ticket-service/ticket architecture

> Architecture diagram of the GitHub repository good-ticket-service/ticket, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/good-ticket-service/ticket
- Repository: https://github.com/good-ticket-service/ticket

## Overview

Ticket is a ticket-booking MSA with a React client and Spring services. A typical customer flow is to browse performances, authenticate, enter the waiting room, select and hold seats, then pay and track the reservation; sellers and admins also manage schedules, settlements, refunds, payouts, and coupons. The graph preserves those documented capabilities, plus the fake payment gateway and shared authentication layer. Some service internals were not sampled, so those links are documented or left unverified rather than inferred from module names.

Main entry points: [`backend/reservation-service/src/main/java/com/sparta/ticket/reservation`](https://github.com/good-ticket-service/ticket/tree/develop/backend/reservation-service/src/main/java/com/sparta/ticket/reservation) (Reservation and seats), [`backend/gateway-service/src/main/java/com/sparta/ticket/gateway`](https://github.com/good-ticket-service/ticket/tree/develop/backend/gateway-service/src/main/java/com/sparta/ticket/gateway) (Gateway), [`backend/payment-service/src/main/java/com/sparta/ticket/payment`](https://github.com/good-ticket-service/ticket/tree/develop/backend/payment-service/src/main/java/com/sparta/ticket/payment) (Payment service), [`frontend/src/App.tsx`](https://github.com/good-ticket-service/ticket/blob/develop/frontend/src/App.tsx) (Ticket web app)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Client"]
  node_web["Ticket web app<br/>[App.tsx]"]
end

subgraph group_identity["Identity and access"]
  node_gateway["Gateway"]
  node_user["User and auth"]
end

subgraph group_booking["Discovery and booking"]
  node_performance["Performance catalog"]
  node_waiting["Waiting room"]
  node_reservation["Reservation and seats"]
  node_coupons["Coupons"]
end

subgraph group_money["Payments and finance"]
  node_payment["Payment service"]
  node_fakepg["Fake payment gateway"]
  node_settlement["Settlement and payouts"]
  node_refund["Refund operations"]
end

subgraph group_platform["Shared platform"]
  node_database[("Service databases")]
  node_redis[("Redis state")]
  node_common["Common contracts"]
  node_config["Configuration server"]
  node_registry["Service registry"]
end

node_customer(("Customer"))
node_seller(("Seller"))
node_admin(("Administrator"))

node_customer -->|"uses"| node_web
node_seller -->|"uses"| node_web
node_admin -->|"uses"| node_web
node_web -.->|"API requests"| node_gateway
node_gateway -->|"verifies user"| node_user
node_gateway -->|"checks queue token"| node_waiting
node_user -.->|"reads and writes"| node_database
node_performance -->|"queries catalog"| node_database
node_waiting -->|"stores queue state"| node_redis
node_reservation -->|"holds seats"| node_redis
node_reservation -.->|"requests payment"| node_payment
node_reservation -.->|"checks payment state"| node_payment
node_reservation -->|"reads reservations"| node_database
node_reservation -.->|"reads seat state"| node_database
node_reservation -->|"checks booking state"| node_reservation
node_coupons -->|"reads issue state"| node_redis
node_coupons -->|"reads coupons"| node_database
node_payment -.->|"calls PG API"| node_fakepg
node_fakepg -.->|"stores transactions"| node_database
node_payment -.->|"posts settlement"| node_settlement
node_refund -.->|"requests cancellation"| node_fakepg
node_gateway -.->|"discovers services"| node_registry
node_gateway -->|"uses user headers"| node_common
node_user -->|"uses error contracts"| node_common
node_config -->|"supplies configuration"| node_gateway

click node_web "https://github.com/good-ticket-service/ticket/blob/develop/frontend/src/App.tsx"
click node_gateway "https://github.com/good-ticket-service/ticket/tree/develop/backend/gateway-service/src/main/java/com/sparta/ticket/gateway"
click node_user "https://github.com/good-ticket-service/ticket/tree/develop/backend/user-service/src/main/java/com/sparta/ticket/user"
click node_performance "https://github.com/good-ticket-service/ticket/tree/develop/backend/performance-service/src/main/java/com/sparta/ticket/performance"
click node_waiting "https://github.com/good-ticket-service/ticket/tree/develop/backend/waiting-room-service/src/main/java/com/sparta/ticket/waitingroom"
click node_reservation "https://github.com/good-ticket-service/ticket/tree/develop/backend/reservation-service/src/main/java/com/sparta/ticket/reservation"
click node_coupons "https://github.com/good-ticket-service/ticket/tree/develop/backend/reservation-service/src/main/java/com/sparta/ticket/reservation/coupon"
click node_payment "https://github.com/good-ticket-service/ticket/tree/develop/backend/payment-service/src/main/java/com/sparta/ticket/payment"
click node_fakepg "https://github.com/good-ticket-service/ticket/tree/develop/backend/fake-pg/src/main/java/com/sparta/ticket/fakepg"
click node_settlement "https://github.com/good-ticket-service/ticket/tree/develop/backend/payment-service/src/main/java/com/sparta/ticket/payment/application/service/settlement"
click node_refund "https://github.com/good-ticket-service/ticket/tree/develop/backend/payment-service/src/main/java/com/sparta/ticket/payment/application/service/refund"
click node_common "https://github.com/good-ticket-service/ticket/blob/develop/backend/common-core/src/main/java/com/sparta/ticket/common/exception/BusinessException.java"
click node_config "https://github.com/good-ticket-service/ticket/blob/develop/backend/config-server/src/main/java/com/sparta/ticket/config/ConfigServerApplication.java"
click node_registry "https://github.com/good-ticket-service/ticket/blob/develop/backend/eureka-server/src/main/java/com/sparta/ticket/eureka/EurekaServerApplication.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_web toneBlue
class node_gateway,node_user toneAmber
class node_performance,node_waiting,node_reservation,node_coupons toneMint
class node_payment,node_fakepg,node_settlement,node_refund toneRose
class node_database,node_redis,node_common,node_config,node_registry,node_customer,node_seller,node_admin toneIndigo
```

## Components

### Client

- [Ticket web app](https://github.com/good-ticket-service/ticket/blob/develop/frontend/src/App.tsx): `frontend/src/App.tsx`

### Identity and access

- [Gateway](https://github.com/good-ticket-service/ticket/tree/develop/backend/gateway-service/src/main/java/com/sparta/ticket/gateway): `backend/gateway-service/src/main/java/com/sparta/ticket/gateway`
- [User and auth](https://github.com/good-ticket-service/ticket/tree/develop/backend/user-service/src/main/java/com/sparta/ticket/user): `backend/user-service/src/main/java/com/sparta/ticket/user`

### Discovery and booking

- [Performance catalog](https://github.com/good-ticket-service/ticket/tree/develop/backend/performance-service/src/main/java/com/sparta/ticket/performance): `backend/performance-service/src/main/java/com/sparta/ticket/performance`
- [Waiting room](https://github.com/good-ticket-service/ticket/tree/develop/backend/waiting-room-service/src/main/java/com/sparta/ticket/waitingroom): `backend/waiting-room-service/src/main/java/com/sparta/ticket/waitingroom`
- [Reservation and seats](https://github.com/good-ticket-service/ticket/tree/develop/backend/reservation-service/src/main/java/com/sparta/ticket/reservation): `backend/reservation-service/src/main/java/com/sparta/ticket/reservation`
- [Coupons](https://github.com/good-ticket-service/ticket/tree/develop/backend/reservation-service/src/main/java/com/sparta/ticket/reservation/coupon): `backend/reservation-service/src/main/java/com/sparta/ticket/reservation/coupon`

### Payments and finance

- [Payment service](https://github.com/good-ticket-service/ticket/tree/develop/backend/payment-service/src/main/java/com/sparta/ticket/payment): `backend/payment-service/src/main/java/com/sparta/ticket/payment`
- [Fake payment gateway](https://github.com/good-ticket-service/ticket/tree/develop/backend/fake-pg/src/main/java/com/sparta/ticket/fakepg): `backend/fake-pg/src/main/java/com/sparta/ticket/fakepg`
- [Settlement and payouts](https://github.com/good-ticket-service/ticket/tree/develop/backend/payment-service/src/main/java/com/sparta/ticket/payment/application/service/settlement): `backend/payment-service/src/main/java/com/sparta/ticket/payment/application/service/settlement`
- [Refund operations](https://github.com/good-ticket-service/ticket/tree/develop/backend/payment-service/src/main/java/com/sparta/ticket/payment/application/service/refund): `backend/payment-service/src/main/java/com/sparta/ticket/payment/application/service/refund`

### Shared platform

- **Service databases**
- **Redis state**
- [Common contracts](https://github.com/good-ticket-service/ticket/blob/develop/backend/common-core/src/main/java/com/sparta/ticket/common/exception/BusinessException.java): `backend/common-core/src/main/java/com/sparta/ticket/common/exception/BusinessException.java`
- [Configuration server](https://github.com/good-ticket-service/ticket/blob/develop/backend/config-server/src/main/java/com/sparta/ticket/config/ConfigServerApplication.java): `backend/config-server/src/main/java/com/sparta/ticket/config/ConfigServerApplication.java`
- [Service registry](https://github.com/good-ticket-service/ticket/blob/develop/backend/eureka-server/src/main/java/com/sparta/ticket/eureka/EurekaServerApplication.java): `backend/eureka-server/src/main/java/com/sparta/ticket/eureka/EurekaServerApplication.java`

### Other components

- **Customer**
- **Seller**
- **Administrator**

## Connections

- Customer → Ticket web app: uses (evidence: `frontend/src/App.tsx`)
- Seller → Ticket web app: uses (evidence: `frontend/src/App.tsx`)
- Administrator → Ticket web app: uses (evidence: `frontend/src/App.tsx`)
- Ticket web app → Gateway: API requests
- Gateway → User and auth: verifies user (evidence: `README.md`)
- Gateway → Waiting room: checks queue token (evidence: `README.md`)
- User and auth → Service databases: reads and writes
- Performance catalog → Service databases: queries catalog (evidence: `backend/performance-service/src/main/java/com/sparta/ticket/performance/infrastructure/persistence/PublicPerformanceQueryRepository.java`)
- Waiting room → Redis state: stores queue state (evidence: `README.md`)
- Reservation and seats → Redis state: holds seats (evidence: `README.md`)
- Reservation and seats → Payment service: requests payment
- Reservation and seats → Payment service: checks payment state
- Reservation and seats → Service databases: reads reservations (evidence: `backend/reservation-service/src/main/java/com/sparta/ticket/reservation/booking/application/query/ReservationQueryService.java`)
- Reservation and seats → Service databases: reads seat state
- Reservation and seats → Reservation and seats: checks booking state (evidence: `backend/reservation-service/src/main/java/com/sparta/ticket/reservation/seat/application/SelectableSeatQueryService.java`)
- Coupons → Redis state: reads issue state (evidence: `backend/reservation-service/src/main/java/com/sparta/ticket/reservation/coupon/application/CouponQueryService.java`)
- Coupons → Service databases: reads coupons (evidence: `backend/reservation-service/src/main/java/com/sparta/ticket/reservation/coupon/application/CouponQueryService.java`)
- Payment service → Fake payment gateway: calls PG API
- Fake payment gateway → Service databases: stores transactions
- Payment service → Settlement and payouts: posts settlement (evidence: `backend/payment-service/src/main/java/com/sparta/ticket/payment/presentation/seller/SellerSettlementPreviewController.java`)
- Refund operations → Fake payment gateway: requests cancellation
- Gateway → Service registry: discovers services
- Gateway → Common contracts: uses user headers (evidence: `README.md`)
- User and auth → Common contracts: uses error contracts (evidence: `backend/user-service/src/main/java/com/sparta/ticket/user/application/UserQueryService.java`)
- Configuration server → Gateway: supplies configuration (evidence: `README.md`)
