# sreeja124/-bank-api architecture

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

- Interactive diagram: https://gitdiagram.com/sreeja124/-bank-api
- Repository: https://github.com/sreeja124/-bank-api

## Overview

Bank API is a Spring Boot REST service for opening and managing accounts, depositing and withdrawing funds, transferring between accounts, and viewing transaction history. The principal flow is an HTTP request through the account controller to transactional account services, which update account state and transaction history through repositories backed by the documented in-memory H2 database; responses are mapped to API DTOs. Transfers lock accounts in a fixed order, and exception handling maps failures to JSON ProblemDetail responses. Some persistence wiring is documented but not shown in the sampled source, so that link is marked unverified.

Main entry points: [`src/main/java/com/bank/api/service/AccountService.java`](https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/service/AccountService.java) (Account service), [`src/main/java/com/bank/api/controller/AccountController.java`](https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/controller/AccountController.java) (Account controller), [`src/main/java/com/bank/api/entity/Transaction.java`](https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/entity/Transaction.java) (Transaction record), [`src/main/java/com/bank/api/repository/AccountRepository.java`](https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/repository/AccountRepository.java) (Account repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["REST API"]
  node_controller["Account controller"]
  node_exception_handler["Exception handler"]
end

subgraph group_banking["Banking domain"]
  node_service["Account service"]
  node_account["Account state<br/>[Account.java]"]
  node_transaction["Transaction record<br/>[Transaction.java]"]
  node_transaction_type["Transaction types"]
end

subgraph group_storage["Persistence"]
  node_account_repo["Account repository"]
  node_transaction_repo["Transaction repository"]
  node_h2[("In-memory H2")]
end

subgraph group_contracts["Contracts and errors"]
  node_account_requests["Account requests"]
  node_amount_request["Amount request<br/>[AmountRequest.java]"]
  node_transfer_request["Transfer request"]
  node_account_response["Account response"]
  node_transaction_response["Transaction response"]
  node_transfer_response["Transfer response"]
  node_exceptions["Domain exceptions"]
end

node_client(("API client"))

node_client -->|"sends requests"| node_controller
node_controller -->|"dispatches operations"| node_service
node_controller -->|"accepts input"| node_account_requests
node_controller -->|"accepts input"| node_amount_request
node_controller -->|"accepts input"| node_transfer_request
node_service -->|"loads and saves"| node_account_repo
node_service -->|"records and reads"| node_transaction_repo
node_service -->|"updates balances"| node_account
node_service -->|"creates records"| node_transaction
node_service -->|"maps results"| node_account_response
node_service -->|"maps history"| node_transaction_response
node_service -->|"returns transfer"| node_transfer_response
node_service -->|"raises rule errors"| node_exceptions
node_transaction -->|"references account"| node_account
node_transaction -->|"stores type"| node_transaction_type
node_account_repo -->|"queries entity"| node_account
node_transaction_repo -->|"queries entity"| node_transaction
node_account_repo -.->|"persists accounts"| node_h2
node_transaction_repo -.->|"persists history"| node_h2
node_exception_handler -->|"handles exceptions"| node_exceptions

click node_controller "https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/controller/AccountController.java"
click node_service "https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/service/AccountService.java"
click node_account "https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/entity/Account.java"
click node_transaction "https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/entity/Transaction.java"
click node_transaction_type "https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/entity/TransactionType.java"
click node_account_repo "https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/repository/AccountRepository.java"
click node_transaction_repo "https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/repository/TransactionRepository.java"
click node_account_requests "https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/dto/CreateAccountRequest.java"
click node_amount_request "https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/dto/AmountRequest.java"
click node_transfer_request "https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/dto/TransferRequest.java"
click node_account_response "https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/dto/AccountResponse.java"
click node_transaction_response "https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/dto/TransactionResponse.java"
click node_transfer_response "https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/dto/TransferResponse.java"
click node_exceptions "https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/exception/BankOperationException.java"
click node_exception_handler "https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/exception/GlobalExceptionHandler.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_exception_handler,node_client toneBlue
class node_service,node_account,node_transaction,node_transaction_type toneAmber
class node_account_repo,node_transaction_repo,node_h2 toneMint
class node_account_requests,node_amount_request,node_transfer_request,node_account_response,node_transaction_response,node_transfer_response,node_exceptions toneRose
```

## Components

### REST API

- [Account controller](https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/controller/AccountController.java): `src/main/java/com/bank/api/controller/AccountController.java`
- [Exception handler](https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/exception/GlobalExceptionHandler.java): `src/main/java/com/bank/api/exception/GlobalExceptionHandler.java`

### Banking domain

- [Account service](https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/service/AccountService.java): `src/main/java/com/bank/api/service/AccountService.java`
- [Account state](https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/entity/Account.java): `src/main/java/com/bank/api/entity/Account.java`
- [Transaction record](https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/entity/Transaction.java): `src/main/java/com/bank/api/entity/Transaction.java`
- [Transaction types](https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/entity/TransactionType.java): `src/main/java/com/bank/api/entity/TransactionType.java`

### Persistence

- [Account repository](https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/repository/AccountRepository.java): `src/main/java/com/bank/api/repository/AccountRepository.java`
- [Transaction repository](https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/repository/TransactionRepository.java): `src/main/java/com/bank/api/repository/TransactionRepository.java`
- **In-memory H2**

### Contracts and errors

- [Account requests](https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/dto/CreateAccountRequest.java): `src/main/java/com/bank/api/dto/CreateAccountRequest.java`
- [Amount request](https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/dto/AmountRequest.java): `src/main/java/com/bank/api/dto/AmountRequest.java`
- [Transfer request](https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/dto/TransferRequest.java): `src/main/java/com/bank/api/dto/TransferRequest.java`
- [Account response](https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/dto/AccountResponse.java): `src/main/java/com/bank/api/dto/AccountResponse.java`
- [Transaction response](https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/dto/TransactionResponse.java): `src/main/java/com/bank/api/dto/TransactionResponse.java`
- [Transfer response](https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/dto/TransferResponse.java): `src/main/java/com/bank/api/dto/TransferResponse.java`
- [Domain exceptions](https://github.com/sreeja124/-bank-api/blob/main/src/main/java/com/bank/api/exception/BankOperationException.java): `src/main/java/com/bank/api/exception/BankOperationException.java`

### Other components

- **API client**

## Connections

- API client → Account controller: sends requests (evidence: `README.md`)
- Account controller → Account service: dispatches operations (evidence: `src/main/java/com/bank/api/controller/AccountController.java`)
- Account controller → Account requests: accepts input (evidence: `src/main/java/com/bank/api/controller/AccountController.java`)
- Account controller → Amount request: accepts input (evidence: `src/main/java/com/bank/api/controller/AccountController.java`)
- Account controller → Transfer request: accepts input (evidence: `src/main/java/com/bank/api/controller/AccountController.java`)
- Account service → Account repository: loads and saves (evidence: `src/main/java/com/bank/api/service/AccountService.java`)
- Account service → Transaction repository: records and reads (evidence: `src/main/java/com/bank/api/service/AccountService.java`)
- Account service → Account state: updates balances (evidence: `src/main/java/com/bank/api/service/AccountService.java`)
- Account service → Transaction record: creates records (evidence: `src/main/java/com/bank/api/service/AccountService.java`)
- Account service → Account response: maps results (evidence: `src/main/java/com/bank/api/service/AccountService.java`)
- Account service → Transaction response: maps history (evidence: `src/main/java/com/bank/api/service/AccountService.java`)
- Account service → Transfer response: returns transfer (evidence: `src/main/java/com/bank/api/service/AccountService.java`)
- Account service → Domain exceptions: raises rule errors (evidence: `src/main/java/com/bank/api/service/AccountService.java`)
- Transaction record → Account state: references account (evidence: `src/main/java/com/bank/api/entity/Transaction.java`)
- Transaction record → Transaction types: stores type (evidence: `src/main/java/com/bank/api/entity/Transaction.java`)
- Account repository → Account state: queries entity (evidence: `src/main/java/com/bank/api/repository/AccountRepository.java`)
- Transaction repository → Transaction record: queries entity (evidence: `src/main/java/com/bank/api/repository/TransactionRepository.java`)
- Account repository → In-memory H2: persists accounts
- Transaction repository → In-memory H2: persists history
- Exception handler → Domain exceptions: handles exceptions (evidence: `src/main/java/com/bank/api/exception/GlobalExceptionHandler.java`)
