# pratripat/cbs-functional-tests architecture

> Architecture diagram of the GitHub repository pratripat/cbs-functional-tests, 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/pratripat/cbs-functional-tests
- Repository: https://github.com/pratripat/cbs-functional-tests

## Overview

This is a Spring Boot banking platform with an Android client: users query accounts, transfer funds, and view transaction history through a channel gateway, while account operations are also directly exposed. Transfers are handled by a dedicated orchestrator with idempotency, a CBS call, and best-effort history recording. Account and history services provide persistence-backed operations. The graph preserves the documented mobile capabilities and service boundaries; unsampled internals are included only where README or source-index evidence supports them.

Main entry points: [`channel-service/src/main/java/com/banking/channel/client/DownstreamClients.java`](https://github.com/pratripat/cbs-functional-tests/blob/main/channel-service/src/main/java/com/banking/channel/client/DownstreamClients.java) (Downstream clients), [`funds-transfer-service/src/main/java/com/banking/transfer/service/FundsTransferService.java`](https://github.com/pratripat/cbs-functional-tests/blob/main/funds-transfer-service/src/main/java/com/banking/transfer/service/FundsTransferService.java) (Transfer orchestrator), [`banking-mobile-app/app/src/main/java/com/banking/mobile/MainActivity.kt`](https://github.com/pratripat/cbs-functional-tests/blob/main/banking-mobile-app/app/src/main/java/com/banking/mobile/MainActivity.kt) (Android app), [`transaction-history-service/src/main/java/com/banking/history/repository/TransactionRepository.java`](https://github.com/pratripat/cbs-functional-tests/blob/main/transaction-history-service/src/main/java/com/banking/history/repository/TransactionRepository.java) (History repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_mobile["Mobile client"]
  node_app["Android app<br/>[MainActivity.kt]"]
end

subgraph group_gateway["Channel gateway"]
  node_channel_api["Channel API"]
  node_channel_clients["Downstream clients"]
  node_channel_dtos["Gateway DTOs<br/>[ChannelDtos.java]"]
end

subgraph group_accounts["Account management"]
  node_account_api["Account API"]
  node_account_logic["Account operations"]
  node_account_dtos["Account DTOs<br/>[AccountDtos.java]"]
  node_account_store["Account repository"]
  node_account_db[("PostgreSQL")]
end

subgraph group_transfer["Funds transfer"]
  node_transfer_api["Transfer API"]
  node_transfer_logic["Transfer orchestrator"]
  node_transfer_record["Transfer record<br/>[FundsTransfer.java]"]
  node_transfer_store["Transfer repository"]
  node_cbs_client["CBS client<br/>[CbsClient.java]"]
  node_history_client["History client"]
end

subgraph group_history["Transaction history"]
  node_history_api["History API"]
  node_history_logic["History operations"]
  node_transaction["Transaction record<br/>[Transaction.java]"]
  node_history_store["History repository"]
  node_history_db[("PostgreSQL")]
end

node_user(("Banking client"))
node_cbs{{"CBS mock"}}

node_user -->|"uses"| node_app
node_app -->|"calls banking APIs"| node_channel_api
node_app -->|"calls deposit API"| node_account_api
node_channel_api -->|"delegates requests"| node_channel_clients
node_channel_clients -->|"HTTP account calls"| node_account_api
node_channel_clients -->|"HTTP transfer call"| node_transfer_api
node_channel_clients -->|"fetches statement"| node_history_api
node_transfer_api -->|"invokes"| node_transfer_logic
node_account_api -->|"invokes"| node_account_logic
node_account_logic -->|"reads and writes"| node_account_store
node_account_store -->|"persists accounts"| node_account_db
node_transfer_logic -->|"checks and saves"| node_transfer_store
node_transfer_store -->|"stores"| node_transfer_record
node_transfer_logic -->|"executes transfer"| node_cbs_client
node_cbs_client -->|"submits transfer"| node_cbs
node_transfer_logic -->|"records success"| node_history_client
node_history_client -->|"submits transaction"| node_history_api
node_history_api -->|"invokes"| node_history_logic
node_history_logic -->|"records and queries"| node_history_store
node_history_store -->|"stores"| node_transaction
node_history_store -->|"persists ledger"| node_history_db

click node_app "https://github.com/pratripat/cbs-functional-tests/blob/main/banking-mobile-app/app/src/main/java/com/banking/mobile/MainActivity.kt"
click node_channel_api "https://github.com/pratripat/cbs-functional-tests/blob/main/channel-service/src/main/java/com/banking/channel/controller/ChannelController.java"
click node_channel_clients "https://github.com/pratripat/cbs-functional-tests/blob/main/channel-service/src/main/java/com/banking/channel/client/DownstreamClients.java"
click node_channel_dtos "https://github.com/pratripat/cbs-functional-tests/blob/main/channel-service/src/main/java/com/banking/channel/dto/ChannelDtos.java"
click node_account_api "https://github.com/pratripat/cbs-functional-tests/blob/main/account-service/src/main/java/com/banking/account/controller/AccountController.java"
click node_account_logic "https://github.com/pratripat/cbs-functional-tests/blob/main/account-service/src/main/java/com/banking/account/service/AccountService.java"
click node_account_dtos "https://github.com/pratripat/cbs-functional-tests/blob/main/account-service/src/main/java/com/banking/account/dto/AccountDtos.java"
click node_account_store "https://github.com/pratripat/cbs-functional-tests/blob/main/account-service/src/main/java/com/banking/account/repository/AccountRepository.java"
click node_transfer_api "https://github.com/pratripat/cbs-functional-tests/blob/main/funds-transfer-service/src/main/java/com/banking/transfer/controller/FundsTransferController.java"
click node_transfer_logic "https://github.com/pratripat/cbs-functional-tests/blob/main/funds-transfer-service/src/main/java/com/banking/transfer/service/FundsTransferService.java"
click node_transfer_record "https://github.com/pratripat/cbs-functional-tests/blob/main/funds-transfer-service/src/main/java/com/banking/transfer/entity/FundsTransfer.java"
click node_transfer_store "https://github.com/pratripat/cbs-functional-tests/blob/main/funds-transfer-service/src/main/java/com/banking/transfer/repository/FundsTransferRepository.java"
click node_cbs_client "https://github.com/pratripat/cbs-functional-tests/blob/main/funds-transfer-service/src/main/java/com/banking/transfer/client/CbsClient.java"
click node_history_client "https://github.com/pratripat/cbs-functional-tests/blob/main/funds-transfer-service/src/main/java/com/banking/transfer/client/HistoryServiceClient.java"
click node_history_api "https://github.com/pratripat/cbs-functional-tests/blob/main/transaction-history-service/src/main/java/com/banking/history/controller/TransactionHistoryController.java"
click node_history_logic "https://github.com/pratripat/cbs-functional-tests/blob/main/transaction-history-service/src/main/java/com/banking/history/service/TransactionHistoryService.java"
click node_transaction "https://github.com/pratripat/cbs-functional-tests/blob/main/transaction-history-service/src/main/java/com/banking/history/entity/Transaction.java"
click node_history_store "https://github.com/pratripat/cbs-functional-tests/blob/main/transaction-history-service/src/main/java/com/banking/history/repository/TransactionRepository.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_app,node_user toneBlue
class node_channel_api,node_channel_clients,node_channel_dtos toneAmber
class node_account_api,node_account_logic,node_account_dtos,node_account_store,node_account_db toneMint
class node_transfer_api,node_transfer_logic,node_transfer_record,node_transfer_store,node_cbs_client,node_history_client toneRose
class node_history_api,node_history_logic,node_transaction,node_history_store,node_history_db,node_cbs toneIndigo
```

## Components

### Mobile client

- [Android app](https://github.com/pratripat/cbs-functional-tests/blob/main/banking-mobile-app/app/src/main/java/com/banking/mobile/MainActivity.kt): `banking-mobile-app/app/src/main/java/com/banking/mobile/MainActivity.kt`

### Channel gateway

- [Channel API](https://github.com/pratripat/cbs-functional-tests/blob/main/channel-service/src/main/java/com/banking/channel/controller/ChannelController.java): `channel-service/src/main/java/com/banking/channel/controller/ChannelController.java`
- [Downstream clients](https://github.com/pratripat/cbs-functional-tests/blob/main/channel-service/src/main/java/com/banking/channel/client/DownstreamClients.java): `channel-service/src/main/java/com/banking/channel/client/DownstreamClients.java`
- [Gateway DTOs](https://github.com/pratripat/cbs-functional-tests/blob/main/channel-service/src/main/java/com/banking/channel/dto/ChannelDtos.java): `channel-service/src/main/java/com/banking/channel/dto/ChannelDtos.java`

### Account management

- [Account API](https://github.com/pratripat/cbs-functional-tests/blob/main/account-service/src/main/java/com/banking/account/controller/AccountController.java): `account-service/src/main/java/com/banking/account/controller/AccountController.java`
- [Account operations](https://github.com/pratripat/cbs-functional-tests/blob/main/account-service/src/main/java/com/banking/account/service/AccountService.java): `account-service/src/main/java/com/banking/account/service/AccountService.java`
- [Account DTOs](https://github.com/pratripat/cbs-functional-tests/blob/main/account-service/src/main/java/com/banking/account/dto/AccountDtos.java): `account-service/src/main/java/com/banking/account/dto/AccountDtos.java`
- [Account repository](https://github.com/pratripat/cbs-functional-tests/blob/main/account-service/src/main/java/com/banking/account/repository/AccountRepository.java): `account-service/src/main/java/com/banking/account/repository/AccountRepository.java`
- **PostgreSQL**

### Funds transfer

- [Transfer API](https://github.com/pratripat/cbs-functional-tests/blob/main/funds-transfer-service/src/main/java/com/banking/transfer/controller/FundsTransferController.java): `funds-transfer-service/src/main/java/com/banking/transfer/controller/FundsTransferController.java`
- [Transfer orchestrator](https://github.com/pratripat/cbs-functional-tests/blob/main/funds-transfer-service/src/main/java/com/banking/transfer/service/FundsTransferService.java): `funds-transfer-service/src/main/java/com/banking/transfer/service/FundsTransferService.java`
- [Transfer record](https://github.com/pratripat/cbs-functional-tests/blob/main/funds-transfer-service/src/main/java/com/banking/transfer/entity/FundsTransfer.java): `funds-transfer-service/src/main/java/com/banking/transfer/entity/FundsTransfer.java`
- [Transfer repository](https://github.com/pratripat/cbs-functional-tests/blob/main/funds-transfer-service/src/main/java/com/banking/transfer/repository/FundsTransferRepository.java): `funds-transfer-service/src/main/java/com/banking/transfer/repository/FundsTransferRepository.java`
- [CBS client](https://github.com/pratripat/cbs-functional-tests/blob/main/funds-transfer-service/src/main/java/com/banking/transfer/client/CbsClient.java): `funds-transfer-service/src/main/java/com/banking/transfer/client/CbsClient.java`
- [History client](https://github.com/pratripat/cbs-functional-tests/blob/main/funds-transfer-service/src/main/java/com/banking/transfer/client/HistoryServiceClient.java): `funds-transfer-service/src/main/java/com/banking/transfer/client/HistoryServiceClient.java`

### Transaction history

- [History API](https://github.com/pratripat/cbs-functional-tests/blob/main/transaction-history-service/src/main/java/com/banking/history/controller/TransactionHistoryController.java): `transaction-history-service/src/main/java/com/banking/history/controller/TransactionHistoryController.java`
- [History operations](https://github.com/pratripat/cbs-functional-tests/blob/main/transaction-history-service/src/main/java/com/banking/history/service/TransactionHistoryService.java): `transaction-history-service/src/main/java/com/banking/history/service/TransactionHistoryService.java`
- [Transaction record](https://github.com/pratripat/cbs-functional-tests/blob/main/transaction-history-service/src/main/java/com/banking/history/entity/Transaction.java): `transaction-history-service/src/main/java/com/banking/history/entity/Transaction.java`
- [History repository](https://github.com/pratripat/cbs-functional-tests/blob/main/transaction-history-service/src/main/java/com/banking/history/repository/TransactionRepository.java): `transaction-history-service/src/main/java/com/banking/history/repository/TransactionRepository.java`
- **PostgreSQL**

### Other components

- **Banking client**
- **CBS mock**

## Connections

- Banking client → Android app: uses (evidence: `README.md`)
- Android app → Channel API: calls banking APIs (evidence: `README.md`)
- Android app → Account API: calls deposit API (evidence: `README.md`)
- Channel API → Downstream clients: delegates requests (evidence: `channel-service/src/main/java/com/banking/channel/controller/ChannelController.java`)
- Downstream clients → Account API: HTTP account calls (evidence: `channel-service/src/main/java/com/banking/channel/client/DownstreamClients.java`)
- Downstream clients → Transfer API: HTTP transfer call (evidence: `channel-service/src/main/java/com/banking/channel/client/DownstreamClients.java`)
- Downstream clients → History API: fetches statement (evidence: `README.md`)
- Transfer API → Transfer orchestrator: invokes (evidence: `funds-transfer-service/src/main/java/com/banking/transfer/controller/FundsTransferController.java`)
- Account API → Account operations: invokes (evidence: `account-service/src/main/java/com/banking/account/controller/AccountController.java`)
- Account operations → Account repository: reads and writes (evidence: `account-service/src/main/java/com/banking/account/service/AccountService.java`)
- Account repository → PostgreSQL: persists accounts (evidence: `README.md`)
- Transfer orchestrator → Transfer repository: checks and saves (evidence: `funds-transfer-service/src/main/java/com/banking/transfer/service/FundsTransferService.java`)
- Transfer repository → Transfer record: stores (evidence: `funds-transfer-service/src/main/java/com/banking/transfer/repository/FundsTransferRepository.java`)
- Transfer orchestrator → CBS client: executes transfer (evidence: `funds-transfer-service/src/main/java/com/banking/transfer/service/FundsTransferService.java`)
- CBS client → CBS mock: submits transfer (evidence: `funds-transfer-service/src/main/java/com/banking/transfer/client/CbsClient.java`)
- Transfer orchestrator → History client: records success (evidence: `funds-transfer-service/src/main/java/com/banking/transfer/service/FundsTransferService.java`)
- History client → History API: submits transaction (evidence: `funds-transfer-service/src/main/java/com/banking/transfer/client/HistoryServiceClient.java`)
- History API → History operations: invokes (evidence: `transaction-history-service/src/main/java/com/banking/history/controller/TransactionHistoryController.java`)
- History operations → History repository: records and queries (evidence: `transaction-history-service/src/main/java/com/banking/history/service/TransactionHistoryService.java`)
- History repository → Transaction record: stores (evidence: `transaction-history-service/src/main/java/com/banking/history/repository/TransactionRepository.java`)
- History repository → PostgreSQL: persists ledger (evidence: `README.md`)
