# mtperaya/concurrent-safe-transaction architecture

> Architecture diagram of the GitHub repository mtperaya/concurrent-safe-transaction, 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/mtperaya/concurrent-safe-transaction
- Repository: https://github.com/mtperaya/concurrent-safe-transaction

## Overview

This repository is a small Spring Boot account API, with README-documented goals of safe money transfers, an append-only ledger, and concurrent processing. The sampled runtime implements account creation/lookup and transaction-request validation; the transfer, history, authentication, and frontend implementations are not present in the supplied tree. Dashed, README-evidenced links distinguish documented behavior from sampled implementation.

Main entry points: [`transaction-backend/src/main/java/com/mtperaya/transactionbackend/controller/AccountController.java`](https://github.com/mtperaya/concurrent-safe-transaction/blob/main/transaction-backend/src/main/java/com/mtperaya/transactionbackend/controller/AccountController.java) (Account Controller), [`transaction-backend/src/main/java/com/mtperaya/transactionbackend/service/AccountService.java`](https://github.com/mtperaya/concurrent-safe-transaction/blob/main/transaction-backend/src/main/java/com/mtperaya/transactionbackend/service/AccountService.java) (Account Service), [`transaction-backend/src/main/java/com/mtperaya/transactionbackend/repository/AccountRepository.java`](https://github.com/mtperaya/concurrent-safe-transaction/blob/main/transaction-backend/src/main/java/com/mtperaya/transactionbackend/repository/AccountRepository.java) (Account Repository), [`transaction-backend/src/main/java/com/mtperaya/transactionbackend/entity/Account.java`](https://github.com/mtperaya/concurrent-safe-transaction/blob/main/transaction-backend/src/main/java/com/mtperaya/transactionbackend/entity/Account.java) (Account Entity)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["HTTP API"]
  node_account_controller["Account Controller"]
  node_transaction_validation["Transaction Validation"]
  node_account_request["Account Request"]
  node_transaction_request["Transfer Request"]
end

subgraph group_accounts["Account Management"]
  node_account_service["Account Service"]
  node_account_entity["Account Entity<br/>[Account.java]"]
  node_account_repository["Account Repository"]
  node_postgres[("PostgreSQL")]
end

subgraph group_transactions["Transfer Domain"]
  node_transfer_processing["Transfer Processing"]
  node_ledger_record["Transaction Ledger<br/>[Transaction.java]"]
  node_transaction_status["Transaction Status"]
  node_history_api["Transaction History"]
end

subgraph group_runtime["Application Runtime"]
  node_auth["JWT Authentication"]
  node_error_handler["Error Handler"]
  node_application["Spring Boot App"]
end

node_client(("API Client"))

node_client -->|"calls account API"| node_account_controller
node_client -->|"submits request"| node_transaction_validation
node_account_controller -->|"accepts"| node_account_request
node_transaction_validation -->|"validates"| node_transaction_request
node_account_controller -->|"calls"| node_account_service
node_account_service -->|"creates"| node_account_entity
node_account_service -->|"saves and reads"| node_account_repository
node_account_repository -->|"persists"| node_account_entity
node_account_repository -.->|"stores accounts"| node_postgres
node_client -.->|"requests transfer"| node_transfer_processing
node_transfer_processing -.->|"records movement"| node_ledger_record
node_transfer_processing -.->|"updates balances"| node_account_entity
node_transfer_processing -.->|"sets status"| node_transaction_status
node_transfer_processing -.->|"locks rows"| node_postgres
node_client -.->|"requests history"| node_history_api
node_client -.->|"authenticates"| node_auth
node_application -.->|"serves API"| node_account_controller

click node_account_controller "https://github.com/mtperaya/concurrent-safe-transaction/blob/main/transaction-backend/src/main/java/com/mtperaya/transactionbackend/controller/AccountController.java"
click node_transaction_validation "https://github.com/mtperaya/concurrent-safe-transaction/blob/main/transaction-backend/src/main/java/com/mtperaya/transactionbackend/controller/TransactionValidationController.java"
click node_account_request "https://github.com/mtperaya/concurrent-safe-transaction/blob/main/transaction-backend/src/main/java/com/mtperaya/transactionbackend/dto/CreateAccountRequest.java"
click node_transaction_request "https://github.com/mtperaya/concurrent-safe-transaction/blob/main/transaction-backend/src/main/java/com/mtperaya/transactionbackend/dto/CreateTransactionRequest.java"
click node_account_service "https://github.com/mtperaya/concurrent-safe-transaction/blob/main/transaction-backend/src/main/java/com/mtperaya/transactionbackend/service/AccountService.java"
click node_account_entity "https://github.com/mtperaya/concurrent-safe-transaction/blob/main/transaction-backend/src/main/java/com/mtperaya/transactionbackend/entity/Account.java"
click node_account_repository "https://github.com/mtperaya/concurrent-safe-transaction/blob/main/transaction-backend/src/main/java/com/mtperaya/transactionbackend/repository/AccountRepository.java"
click node_ledger_record "https://github.com/mtperaya/concurrent-safe-transaction/blob/main/transaction-backend/src/main/java/com/mtperaya/transactionbackend/entity/Transaction.java"
click node_transaction_status "https://github.com/mtperaya/concurrent-safe-transaction/blob/main/transaction-backend/src/main/java/com/mtperaya/transactionbackend/entity/TransactionStatus.java"
click node_error_handler "https://github.com/mtperaya/concurrent-safe-transaction/blob/main/transaction-backend/src/main/java/com/mtperaya/transactionbackend/exception/GlobalExceptionHandler.java"
click node_application "https://github.com/mtperaya/concurrent-safe-transaction/blob/main/transaction-backend/src/main/java/com/mtperaya/transactionbackend/TransactionBackendApplication.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_account_controller,node_transaction_validation,node_account_request,node_transaction_request,node_client toneBlue
class node_account_service,node_account_entity,node_account_repository,node_postgres toneAmber
class node_transfer_processing,node_ledger_record,node_transaction_status,node_history_api toneMint
class node_auth,node_error_handler,node_application toneRose
```

## Components

### HTTP API

- [Account Controller](https://github.com/mtperaya/concurrent-safe-transaction/blob/main/transaction-backend/src/main/java/com/mtperaya/transactionbackend/controller/AccountController.java): `transaction-backend/src/main/java/com/mtperaya/transactionbackend/controller/AccountController.java`
- [Transaction Validation](https://github.com/mtperaya/concurrent-safe-transaction/blob/main/transaction-backend/src/main/java/com/mtperaya/transactionbackend/controller/TransactionValidationController.java): `transaction-backend/src/main/java/com/mtperaya/transactionbackend/controller/TransactionValidationController.java`
- [Account Request](https://github.com/mtperaya/concurrent-safe-transaction/blob/main/transaction-backend/src/main/java/com/mtperaya/transactionbackend/dto/CreateAccountRequest.java): `transaction-backend/src/main/java/com/mtperaya/transactionbackend/dto/CreateAccountRequest.java`
- [Transfer Request](https://github.com/mtperaya/concurrent-safe-transaction/blob/main/transaction-backend/src/main/java/com/mtperaya/transactionbackend/dto/CreateTransactionRequest.java): `transaction-backend/src/main/java/com/mtperaya/transactionbackend/dto/CreateTransactionRequest.java`

### Account Management

- [Account Service](https://github.com/mtperaya/concurrent-safe-transaction/blob/main/transaction-backend/src/main/java/com/mtperaya/transactionbackend/service/AccountService.java): `transaction-backend/src/main/java/com/mtperaya/transactionbackend/service/AccountService.java`
- [Account Entity](https://github.com/mtperaya/concurrent-safe-transaction/blob/main/transaction-backend/src/main/java/com/mtperaya/transactionbackend/entity/Account.java): `transaction-backend/src/main/java/com/mtperaya/transactionbackend/entity/Account.java`
- [Account Repository](https://github.com/mtperaya/concurrent-safe-transaction/blob/main/transaction-backend/src/main/java/com/mtperaya/transactionbackend/repository/AccountRepository.java): `transaction-backend/src/main/java/com/mtperaya/transactionbackend/repository/AccountRepository.java`
- **PostgreSQL**

### Transfer Domain

- **Transfer Processing**
- [Transaction Ledger](https://github.com/mtperaya/concurrent-safe-transaction/blob/main/transaction-backend/src/main/java/com/mtperaya/transactionbackend/entity/Transaction.java): `transaction-backend/src/main/java/com/mtperaya/transactionbackend/entity/Transaction.java`
- [Transaction Status](https://github.com/mtperaya/concurrent-safe-transaction/blob/main/transaction-backend/src/main/java/com/mtperaya/transactionbackend/entity/TransactionStatus.java): `transaction-backend/src/main/java/com/mtperaya/transactionbackend/entity/TransactionStatus.java`
- **Transaction History**

### Application Runtime

- **JWT Authentication**
- [Error Handler](https://github.com/mtperaya/concurrent-safe-transaction/blob/main/transaction-backend/src/main/java/com/mtperaya/transactionbackend/exception/GlobalExceptionHandler.java): `transaction-backend/src/main/java/com/mtperaya/transactionbackend/exception/GlobalExceptionHandler.java`
- [Spring Boot App](https://github.com/mtperaya/concurrent-safe-transaction/blob/main/transaction-backend/src/main/java/com/mtperaya/transactionbackend/TransactionBackendApplication.java): `transaction-backend/src/main/java/com/mtperaya/transactionbackend/TransactionBackendApplication.java`

### Other components

- **API Client**

## Connections

- API Client → Account Controller: calls account API (evidence: `README.md`)
- API Client → Transaction Validation: submits request (evidence: `README.md`)
- Account Controller → Account Request: accepts (evidence: `transaction-backend/src/main/java/com/mtperaya/transactionbackend/controller/AccountController.java`)
- Transaction Validation → Transfer Request: validates (evidence: `transaction-backend/src/main/java/com/mtperaya/transactionbackend/controller/TransactionValidationController.java`)
- Account Controller → Account Service: calls (evidence: `transaction-backend/src/main/java/com/mtperaya/transactionbackend/controller/AccountController.java`)
- Account Service → Account Entity: creates (evidence: `transaction-backend/src/main/java/com/mtperaya/transactionbackend/service/AccountService.java`)
- Account Service → Account Repository: saves and reads (evidence: `transaction-backend/src/main/java/com/mtperaya/transactionbackend/service/AccountService.java`)
- Account Repository → Account Entity: persists (evidence: `transaction-backend/src/main/java/com/mtperaya/transactionbackend/repository/AccountRepository.java`)
- Account Repository → PostgreSQL: stores accounts
- API Client → Transfer Processing: requests transfer (evidence: `README.md`)
- Transfer Processing → Transaction Ledger: records movement (evidence: `README.md`)
- Transfer Processing → Account Entity: updates balances (evidence: `README.md`)
- Transfer Processing → Transaction Status: sets status (evidence: `README.md`)
- Transfer Processing → PostgreSQL: locks rows (evidence: `README.md`)
- API Client → Transaction History: requests history (evidence: `README.md`)
- API Client → JWT Authentication: authenticates (evidence: `README.md`)
- Spring Boot App → Account Controller: serves API
