# truthplumage/backend_public5 architecture

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

- Interactive diagram: https://gitdiagram.com/truthplumage/backend_public5
- Repository: https://github.com/truthplumage/backend_public5

## Overview

Backend5 is a Spring application for marketplace operations: members authenticate, users manage products and orders, payments are confirmed or recorded as failures, and products can be searched through Elasticsearch. Separate Kafka endpoints publish order events, while batch endpoints launch settlement work. The sampled services show the core application-to-repository and payment-provider interactions. Several peripheral modules, including settlement internals and event consumption, are present in the tree but their runtime wiring is not established by the available excerpts.

Main entry points: [`src/main/java/com/grepp/backend5/payment/application/PaymentService.java`](https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/payment/application/PaymentService.java) (Payment service), [`src/main/java/com/grepp/backend5/member/application/service/MemberService.java`](https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/member/application/service/MemberService.java) (Member service), [`src/main/java/com/grepp/backend5/product/application/service/ProductApplicationService.java`](https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/product/application/service/ProductApplicationService.java) (Product service), [`src/main/java/com/grepp/backend5/search/application/SearchService.java`](https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/search/application/SearchService.java) (Search service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_identity["Member identity"]
  node_member_api["Member API"]
  node_member_service["Member service<br/>[MemberService.java]"]
  node_member_store[("Member repository")]
  node_jwt["JWT provider<br/>[JwtProvider.java]"]
  node_auth_api["Auth API"]
end

subgraph group_commerce["Marketplace operations"]
  node_product_api["Product API"]
  node_product_service["Product service"]
  node_product_store[("Product repository")]
  node_seller_acl["Seller identity ACL<br/>[SellerAcl.java]"]
  node_order_api["Order API"]
  node_order_service["Order service"]
  node_order_store[("Order repository")]
end

subgraph group_money["Payments and settlement"]
  node_payment_api["Payment API"]
  node_payment_service["Payment service"]
  node_payment_store[("Payment repositories")]
  node_failure_store[("Failure repository")]
  node_batch_api["Batch API"]
  node_batch_launcher["Settlement launcher"]
  node_settlement_task["Settlement tasklet"]
end

subgraph group_discovery["Product search"]
  node_search_api["Search API"]
  node_search_service["Search service<br/>[SearchService.java]"]
  node_search_store[("Search repository")]
end

subgraph group_messaging["Events"]
  node_kafka_api["Kafka order API"]
  node_event_publisher["Order publisher"]
  node_event_listener["Order listener"]
end

node_customer(("API clients"))
node_toss["Toss Payments"]
node_elasticsearch[("Elasticsearch")]
node_kafka["Kafka broker"]

node_customer -->|"calls"| node_member_api
node_member_api -->|"delegates to"| node_member_service
node_member_service -->|"reads and writes"| node_member_store
node_member_service -->|"generates tokens"| node_jwt
node_customer -->|"calls"| node_product_api
node_product_api -->|"delegates to"| node_product_service
node_product_service -->|"reads and writes"| node_product_store
node_product_service -->|"checks seller"| node_seller_acl
node_customer -->|"calls"| node_order_api
node_order_api -->|"delegates to"| node_order_service
node_order_service -->|"reads and writes"| node_order_store
node_customer -->|"calls"| node_payment_api
node_payment_api -->|"delegates to"| node_payment_service
node_payment_service -->|"confirms payment"| node_toss
node_payment_service -->|"reads and writes"| node_payment_store
node_payment_service -->|"records failures"| node_failure_store
node_customer -->|"calls"| node_batch_api
node_batch_api -->|"launches job"| node_batch_launcher
node_customer -->|"calls"| node_search_api
node_search_api -->|"delegates to"| node_search_service
node_search_service -->|"indexes and searches"| node_search_store
node_search_service -->|"manages index"| node_elasticsearch
node_customer -->|"calls"| node_kafka_api
node_kafka_api -->|"publishes via"| node_event_publisher
node_event_publisher -.->|"sends events"| node_kafka
node_kafka -.->|"delivers events"| node_event_listener
node_batch_launcher -.->|"runs"| node_settlement_task

click node_member_api "https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/member/presentation/controller/MemberController.java"
click node_member_service "https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/member/application/service/MemberService.java"
click node_member_store "https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/member/domain/repository/MemberRepository.java"
click node_jwt "https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/member/util/JwtProvider.java"
click node_auth_api "https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/auth/presentation/controller/AuthController.java"
click node_product_api "https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/product/presentation/controller/ProductController.java"
click node_product_service "https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/product/application/service/ProductApplicationService.java"
click node_product_store "https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/product/domain/repository/ProductRepository.java"
click node_seller_acl "https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/product/application/acl/SellerAcl.java"
click node_order_api "https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/order/presentation/controller/OrderController.java"
click node_order_service "https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/order/application/service/OrderApplicationService.java"
click node_order_store "https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/order/domain/repository/OrderRepository.java"
click node_payment_api "https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/payment/presentation/PaymentController.java"
click node_payment_service "https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/payment/application/PaymentService.java"
click node_payment_store "https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/payment/domain/repository/PaymentRepository.java"
click node_failure_store "https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/payment/domain/repository/PaymentFailureRepository.java"
click node_batch_api "https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/batch/presentation/BatchJobController.java"
click node_batch_launcher "https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/batch/service/SettlementJobLauncher.java"
click node_settlement_task "https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/batch/job/SettlementTasklet.java"
click node_search_api "https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/search/presentation/controller/ProductSearchController.java"
click node_search_service "https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/search/application/SearchService.java"
click node_search_store "https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/search/infrastructure/ProductSearchRepository.java"
click node_kafka_api "https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/kafka/presentation/KafkaOrderController.java"
click node_event_publisher "https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/kafka/application/OrderEventPublisher.java"
click node_event_listener "https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/kafka/application/OrderEventListener.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_member_api,node_member_service,node_member_store,node_jwt,node_auth_api,node_customer toneBlue
class node_product_api,node_product_service,node_product_store,node_seller_acl,node_order_api,node_order_service,node_order_store,node_elasticsearch toneAmber
class node_payment_api,node_payment_service,node_payment_store,node_failure_store,node_batch_api,node_batch_launcher,node_settlement_task toneMint
class node_search_api,node_search_service,node_search_store toneRose
class node_kafka_api,node_event_publisher,node_event_listener,node_toss,node_kafka toneIndigo
```

## Components

### Member identity

- [Member API](https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/member/presentation/controller/MemberController.java): `src/main/java/com/grepp/backend5/member/presentation/controller/MemberController.java`
- [Member service](https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/member/application/service/MemberService.java): `src/main/java/com/grepp/backend5/member/application/service/MemberService.java`
- [Member repository](https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/member/domain/repository/MemberRepository.java): `src/main/java/com/grepp/backend5/member/domain/repository/MemberRepository.java`
- [JWT provider](https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/member/util/JwtProvider.java): `src/main/java/com/grepp/backend5/member/util/JwtProvider.java`
- [Auth API](https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/auth/presentation/controller/AuthController.java): `src/main/java/com/grepp/backend5/auth/presentation/controller/AuthController.java`

### Marketplace operations

- [Product API](https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/product/presentation/controller/ProductController.java): `src/main/java/com/grepp/backend5/product/presentation/controller/ProductController.java`
- [Product service](https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/product/application/service/ProductApplicationService.java): `src/main/java/com/grepp/backend5/product/application/service/ProductApplicationService.java`
- [Product repository](https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/product/domain/repository/ProductRepository.java): `src/main/java/com/grepp/backend5/product/domain/repository/ProductRepository.java`
- [Seller identity ACL](https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/product/application/acl/SellerAcl.java): `src/main/java/com/grepp/backend5/product/application/acl/SellerAcl.java`
- [Order API](https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/order/presentation/controller/OrderController.java): `src/main/java/com/grepp/backend5/order/presentation/controller/OrderController.java`
- [Order service](https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/order/application/service/OrderApplicationService.java): `src/main/java/com/grepp/backend5/order/application/service/OrderApplicationService.java`
- [Order repository](https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/order/domain/repository/OrderRepository.java): `src/main/java/com/grepp/backend5/order/domain/repository/OrderRepository.java`

### Payments and settlement

- [Payment API](https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/payment/presentation/PaymentController.java): `src/main/java/com/grepp/backend5/payment/presentation/PaymentController.java`
- [Payment service](https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/payment/application/PaymentService.java): `src/main/java/com/grepp/backend5/payment/application/PaymentService.java`
- [Payment repositories](https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/payment/domain/repository/PaymentRepository.java): `src/main/java/com/grepp/backend5/payment/domain/repository/PaymentRepository.java`
- [Failure repository](https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/payment/domain/repository/PaymentFailureRepository.java): `src/main/java/com/grepp/backend5/payment/domain/repository/PaymentFailureRepository.java`
- [Batch API](https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/batch/presentation/BatchJobController.java): `src/main/java/com/grepp/backend5/batch/presentation/BatchJobController.java`
- [Settlement launcher](https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/batch/service/SettlementJobLauncher.java): `src/main/java/com/grepp/backend5/batch/service/SettlementJobLauncher.java`
- [Settlement tasklet](https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/batch/job/SettlementTasklet.java): `src/main/java/com/grepp/backend5/batch/job/SettlementTasklet.java`

### Product search

- [Search API](https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/search/presentation/controller/ProductSearchController.java): `src/main/java/com/grepp/backend5/search/presentation/controller/ProductSearchController.java`
- [Search service](https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/search/application/SearchService.java): `src/main/java/com/grepp/backend5/search/application/SearchService.java`
- [Search repository](https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/search/infrastructure/ProductSearchRepository.java): `src/main/java/com/grepp/backend5/search/infrastructure/ProductSearchRepository.java`

### Events

- [Kafka order API](https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/kafka/presentation/KafkaOrderController.java): `src/main/java/com/grepp/backend5/kafka/presentation/KafkaOrderController.java`
- [Order publisher](https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/kafka/application/OrderEventPublisher.java): `src/main/java/com/grepp/backend5/kafka/application/OrderEventPublisher.java`
- [Order listener](https://github.com/truthplumage/backend_public5/blob/dev/src/main/java/com/grepp/backend5/kafka/application/OrderEventListener.java): `src/main/java/com/grepp/backend5/kafka/application/OrderEventListener.java`

### Other components

- **API clients**
- **Toss Payments**
- **Elasticsearch**
- **Kafka broker**

## Connections

- API clients → Member API: calls (evidence: `src/main/java/com/grepp/backend5/member/presentation/controller/MemberController.java`)
- Member API → Member service: delegates to (evidence: `src/main/java/com/grepp/backend5/member/presentation/controller/MemberController.java`)
- Member service → Member repository: reads and writes (evidence: `src/main/java/com/grepp/backend5/member/application/service/MemberService.java`)
- Member service → JWT provider: generates tokens (evidence: `src/main/java/com/grepp/backend5/member/application/service/MemberService.java`)
- API clients → Product API: calls (evidence: `src/main/java/com/grepp/backend5/product/presentation/controller/ProductController.java`)
- Product API → Product service: delegates to (evidence: `src/main/java/com/grepp/backend5/product/presentation/controller/ProductController.java`)
- Product service → Product repository: reads and writes (evidence: `src/main/java/com/grepp/backend5/product/application/service/ProductApplicationService.java`)
- Product service → Seller identity ACL: checks seller (evidence: `src/main/java/com/grepp/backend5/product/application/service/ProductApplicationService.java`)
- API clients → Order API: calls (evidence: `src/main/java/com/grepp/backend5/order/presentation/controller/OrderController.java`)
- Order API → Order service: delegates to (evidence: `src/main/java/com/grepp/backend5/order/presentation/controller/OrderController.java`)
- Order service → Order repository: reads and writes (evidence: `src/main/java/com/grepp/backend5/order/application/service/OrderApplicationService.java`)
- API clients → Payment API: calls (evidence: `src/main/java/com/grepp/backend5/payment/presentation/PaymentController.java`)
- Payment API → Payment service: delegates to (evidence: `src/main/java/com/grepp/backend5/payment/presentation/PaymentController.java`)
- Payment service → Toss Payments: confirms payment (evidence: `src/main/java/com/grepp/backend5/payment/application/PaymentService.java`)
- Payment service → Payment repositories: reads and writes (evidence: `src/main/java/com/grepp/backend5/payment/application/PaymentService.java`)
- Payment service → Failure repository: records failures (evidence: `src/main/java/com/grepp/backend5/payment/application/PaymentService.java`)
- API clients → Batch API: calls (evidence: `src/main/java/com/grepp/backend5/batch/presentation/BatchJobController.java`)
- Batch API → Settlement launcher: launches job (evidence: `src/main/java/com/grepp/backend5/batch/presentation/BatchJobController.java`)
- API clients → Search API: calls (evidence: `src/main/java/com/grepp/backend5/search/presentation/controller/ProductSearchController.java`)
- Search API → Search service: delegates to (evidence: `src/main/java/com/grepp/backend5/search/presentation/controller/ProductSearchController.java`)
- Search service → Search repository: indexes and searches (evidence: `src/main/java/com/grepp/backend5/search/application/SearchService.java`)
- Search service → Elasticsearch: manages index (evidence: `src/main/java/com/grepp/backend5/search/application/SearchService.java`)
- API clients → Kafka order API: calls (evidence: `src/main/java/com/grepp/backend5/kafka/presentation/KafkaOrderController.java`)
- Kafka order API → Order publisher: publishes via (evidence: `src/main/java/com/grepp/backend5/kafka/presentation/KafkaOrderController.java`)
- Order publisher → Kafka broker: sends events
- Kafka broker → Order listener: delivers events
- Settlement launcher → Settlement tasklet: runs
