# sergeismazal/banking-simulation-poc architecture

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

- Interactive diagram: https://gitdiagram.com/sergeismazal/banking-simulation-poc
- Repository: https://github.com/sergeismazal/banking-simulation-poc

## Overview

This is a banking transaction simulator. In the available Java sources, the workflow accepts a transfer request, validates account IDs, records a pending transaction and outbox event, then periodically publishes unprocessed events to Kafka. The README also describes frontend, processing, Redis, and anomaly-monitoring capabilities that are not present in the supplied file tree; those documented branches are marked with null paths and dashed links. The sampled sources do not show downstream Kafka consumers or balance updates.

Main entry points: [`src/main/java/com/fdb/frankfurt/service/TransferService.java`](https://github.com/sergeismazal/banking-simulation-poc/blob/main/src/main/java/com/fdb/frankfurt/service/TransferService.java) (Transfer service), [`src/main/java/com/fdb/frankfurt/controller/TransferController.java`](https://github.com/sergeismazal/banking-simulation-poc/blob/main/src/main/java/com/fdb/frankfurt/controller/TransferController.java) (Transfer controller), [`src/main/java/com/fdb/frankfurt/repository/OutboxRepository.java`](https://github.com/sergeismazal/banking-simulation-poc/blob/main/src/main/java/com/fdb/frankfurt/repository/OutboxRepository.java) (Outbox repository), [`src/main/java/com/fdb/frankfurt/service/OutboxPublisher.java`](https://github.com/sergeismazal/banking-simulation-poc/blob/main/src/main/java/com/fdb/frankfurt/service/OutboxPublisher.java) (Outbox publisher)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["Transfer API"]
  node_controller["Transfer controller"]
  node_request["Transfer request"]
  node_transfer["Transfer service"]
end

subgraph group_persistence["Persistence"]
  node_accountrepo["Account repository"]
  node_txrepo["Transaction repository"]
  node_outboxrepo["Outbox repository"]
  node_account["Account entity<br/>[Account.java]"]
  node_transaction["Transaction entity<br/>[Transaction.java]"]
  node_outbox["Outbox event<br/>[OutboxEvent.java]"]
end

subgraph group_messaging["Event publishing"]
  node_publisher["Outbox publisher"]
  node_kafka["Kafka"]
end

subgraph group_documented["Documented capabilities"]
  node_frontend["Dashboard"]
  node_processor["Transaction processor"]
  node_redis[("Redis controls")]
  node_anomaly["Anomaly monitoring"]
  node_alerts["Live alerts"]
end

node_client(("Transfer client"))

node_client -->|"submits"| node_controller
node_controller -->|"accepts"| node_request
node_controller -->|"calls"| node_transfer
node_transfer -->|"checks accounts"| node_accountrepo
node_transfer -->|"saves transaction"| node_txrepo
node_transfer -->|"saves event"| node_outboxrepo
node_accountrepo -->|"maps"| node_account
node_txrepo -->|"maps"| node_transaction
node_outboxrepo -->|"maps"| node_outbox
node_publisher -->|"reads and updates"| node_outboxrepo
node_publisher -->|"publishes"| node_kafka
node_frontend -.->|"uses API"| node_controller
node_kafka -.->|"delivers events"| node_processor
node_processor -.->|"uses locks and limits"| node_redis
node_kafka -.->|"streams transactions"| node_anomaly
node_anomaly -.->|"emits"| node_alerts

click node_controller "https://github.com/sergeismazal/banking-simulation-poc/blob/main/src/main/java/com/fdb/frankfurt/controller/TransferController.java"
click node_request "https://github.com/sergeismazal/banking-simulation-poc/blob/main/src/main/java/com/fdb/frankfurt/dto/TransferRequest.java"
click node_transfer "https://github.com/sergeismazal/banking-simulation-poc/blob/main/src/main/java/com/fdb/frankfurt/service/TransferService.java"
click node_accountrepo "https://github.com/sergeismazal/banking-simulation-poc/blob/main/src/main/java/com/fdb/frankfurt/repository/AccountRepository.java"
click node_txrepo "https://github.com/sergeismazal/banking-simulation-poc/blob/main/src/main/java/com/fdb/frankfurt/repository/TransactionRepository.java"
click node_outboxrepo "https://github.com/sergeismazal/banking-simulation-poc/blob/main/src/main/java/com/fdb/frankfurt/repository/OutboxRepository.java"
click node_account "https://github.com/sergeismazal/banking-simulation-poc/blob/main/src/main/java/com/fdb/frankfurt/model/Account.java"
click node_transaction "https://github.com/sergeismazal/banking-simulation-poc/blob/main/src/main/java/com/fdb/frankfurt/model/Transaction.java"
click node_outbox "https://github.com/sergeismazal/banking-simulation-poc/blob/main/src/main/java/com/fdb/frankfurt/model/OutboxEvent.java"
click node_publisher "https://github.com/sergeismazal/banking-simulation-poc/blob/main/src/main/java/com/fdb/frankfurt/service/OutboxPublisher.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_controller,node_request,node_transfer,node_client toneBlue
class node_accountrepo,node_txrepo,node_outboxrepo,node_account,node_transaction,node_outbox toneAmber
class node_publisher,node_kafka toneMint
class node_frontend,node_processor,node_redis,node_anomaly,node_alerts toneRose
```

## Components

### Transfer API

- [Transfer controller](https://github.com/sergeismazal/banking-simulation-poc/blob/main/src/main/java/com/fdb/frankfurt/controller/TransferController.java): `src/main/java/com/fdb/frankfurt/controller/TransferController.java`
- [Transfer request](https://github.com/sergeismazal/banking-simulation-poc/blob/main/src/main/java/com/fdb/frankfurt/dto/TransferRequest.java): `src/main/java/com/fdb/frankfurt/dto/TransferRequest.java`
- [Transfer service](https://github.com/sergeismazal/banking-simulation-poc/blob/main/src/main/java/com/fdb/frankfurt/service/TransferService.java): `src/main/java/com/fdb/frankfurt/service/TransferService.java`

### Persistence

- [Account repository](https://github.com/sergeismazal/banking-simulation-poc/blob/main/src/main/java/com/fdb/frankfurt/repository/AccountRepository.java): `src/main/java/com/fdb/frankfurt/repository/AccountRepository.java`
- [Transaction repository](https://github.com/sergeismazal/banking-simulation-poc/blob/main/src/main/java/com/fdb/frankfurt/repository/TransactionRepository.java): `src/main/java/com/fdb/frankfurt/repository/TransactionRepository.java`
- [Outbox repository](https://github.com/sergeismazal/banking-simulation-poc/blob/main/src/main/java/com/fdb/frankfurt/repository/OutboxRepository.java): `src/main/java/com/fdb/frankfurt/repository/OutboxRepository.java`
- [Account entity](https://github.com/sergeismazal/banking-simulation-poc/blob/main/src/main/java/com/fdb/frankfurt/model/Account.java): `src/main/java/com/fdb/frankfurt/model/Account.java`
- [Transaction entity](https://github.com/sergeismazal/banking-simulation-poc/blob/main/src/main/java/com/fdb/frankfurt/model/Transaction.java): `src/main/java/com/fdb/frankfurt/model/Transaction.java`
- [Outbox event](https://github.com/sergeismazal/banking-simulation-poc/blob/main/src/main/java/com/fdb/frankfurt/model/OutboxEvent.java): `src/main/java/com/fdb/frankfurt/model/OutboxEvent.java`

### Event publishing

- [Outbox publisher](https://github.com/sergeismazal/banking-simulation-poc/blob/main/src/main/java/com/fdb/frankfurt/service/OutboxPublisher.java): `src/main/java/com/fdb/frankfurt/service/OutboxPublisher.java`
- **Kafka**

### Documented capabilities

- **Dashboard**
- **Transaction processor**
- **Redis controls**
- **Anomaly monitoring**
- **Live alerts**

### Other components

- **Transfer client**

## Connections

- Transfer client → Transfer controller: submits
- Transfer controller → Transfer request: accepts
- Transfer controller → Transfer service: calls
- Transfer service → Account repository: checks accounts
- Transfer service → Transaction repository: saves transaction
- Transfer service → Outbox repository: saves event
- Account repository → Account entity: maps
- Transaction repository → Transaction entity: maps
- Outbox repository → Outbox event: maps
- Outbox publisher → Outbox repository: reads and updates
- Outbox publisher → Kafka: publishes
- Dashboard → Transfer controller: uses API
- Kafka → Transaction processor: delivers events
- Transaction processor → Redis controls: uses locks and limits
- Kafka → Anomaly monitoring: streams transactions
- Anomaly monitoring → Live alerts: emits
