# mihaita-catalin/bank-app architecture

> Architecture diagram of the GitHub repository mihaita-catalin/bank-app, 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/mihaita-catalin/bank-app
- Repository: https://github.com/mihaita-catalin/bank-app

## Overview

This is a small in-memory banking application: clients use the Banking service to manage clients and accounts, perform deposits, withdrawals and transfers, then retrieve account or client views and bank reports. The domain includes client/active-account state, checking and savings balance rules, repository persistence, and aggregate reporting. The main workflow and service-to-repository/model calls are visible in excerpts; no README documents additional capabilities, and the XML configuration was not sampled, so its wiring is not represented.

Main entry points: [`src/main/java/com/luxoft/bankapp/service/BankingImpl.java`](https://github.com/mihaita-catalin/bank-app/blob/ex1-t1/src/main/java/com/luxoft/bankapp/service/BankingImpl.java) (Banking operations), [`src/main/java/com/luxoft/bankapp/service/BankReportServiceImpl.java`](https://github.com/mihaita-catalin/bank-app/blob/ex1-t1/src/main/java/com/luxoft/bankapp/service/BankReportServiceImpl.java) (Bank reports), [`src/main/java/com/luxoft/bankapp/model/Client.java`](https://github.com/mihaita-catalin/bank-app/blob/ex1-t1/src/main/java/com/luxoft/bankapp/model/Client.java) (Client accounts), [`src/main/java/com/luxoft/bankapp/service/storage/ClientRepository.java`](https://github.com/mihaita-catalin/bank-app/blob/ex1-t1/src/main/java/com/luxoft/bankapp/service/storage/ClientRepository.java) (Repository contract)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Application entry"]
  node_app["Demo workflow"]
end

subgraph group_services["Banking services"]
  node_banking["Banking operations<br/>[BankingImpl.java]"]
  node_reports["Bank reports"]
end

subgraph group_domain["Banking domain"]
  node_client["Client accounts<br/>[Client.java]"]
  node_account["Account balances"]
  node_checking["Checking rules"]
  node_saving["Savings rules<br/>[SavingAccount.java]"]
end

subgraph group_storage["Client storage"]
  node_repository["Repository contract"]
  node_mapstore[("In-memory clients")]
end

node_operator(("Bank user"))

node_operator -->|"runs demo"| node_app
node_app -->|"calls operations"| node_banking
node_app -->|"invokes reports"| node_reports
node_banking -->|"uses contract"| node_repository
node_reports -->|"reads clients"| node_repository
node_repository -.->|"implemented by"| node_mapstore
node_banking -->|"manages clients"| node_client
node_client -->|"updates state"| node_repository
node_client -->|"delegates balance"| node_account
node_checking -->|"extends balance"| node_account
node_saving -->|"extends balance"| node_account
node_banking -->|"creates accounts"| node_checking
node_banking -->|"creates accounts"| node_saving
node_reports -->|"aggregates clients"| node_client
node_reports -->|"sums balances"| node_account

click node_app "https://github.com/mihaita-catalin/bank-app/blob/ex1-t1/src/main/java/BankApplication.java"
click node_banking "https://github.com/mihaita-catalin/bank-app/blob/ex1-t1/src/main/java/com/luxoft/bankapp/service/BankingImpl.java"
click node_reports "https://github.com/mihaita-catalin/bank-app/blob/ex1-t1/src/main/java/com/luxoft/bankapp/service/BankReportServiceImpl.java"
click node_client "https://github.com/mihaita-catalin/bank-app/blob/ex1-t1/src/main/java/com/luxoft/bankapp/model/Client.java"
click node_account "https://github.com/mihaita-catalin/bank-app/blob/ex1-t1/src/main/java/com/luxoft/bankapp/model/AbstractAccount.java"
click node_checking "https://github.com/mihaita-catalin/bank-app/blob/ex1-t1/src/main/java/com/luxoft/bankapp/model/CheckingAccount.java"
click node_saving "https://github.com/mihaita-catalin/bank-app/blob/ex1-t1/src/main/java/com/luxoft/bankapp/model/SavingAccount.java"
click node_repository "https://github.com/mihaita-catalin/bank-app/blob/ex1-t1/src/main/java/com/luxoft/bankapp/service/storage/ClientRepository.java"
click node_mapstore "https://github.com/mihaita-catalin/bank-app/blob/ex1-t1/src/main/java/com/luxoft/bankapp/service/storage/MapClientRepository.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_operator toneBlue
class node_banking,node_reports toneAmber
class node_client,node_account,node_checking,node_saving toneMint
class node_repository,node_mapstore toneRose
```

## Components

### Application entry

- [Demo workflow](https://github.com/mihaita-catalin/bank-app/blob/ex1-t1/src/main/java/BankApplication.java): `src/main/java/BankApplication.java`

### Banking services

- [Banking operations](https://github.com/mihaita-catalin/bank-app/blob/ex1-t1/src/main/java/com/luxoft/bankapp/service/BankingImpl.java): `src/main/java/com/luxoft/bankapp/service/BankingImpl.java`
- [Bank reports](https://github.com/mihaita-catalin/bank-app/blob/ex1-t1/src/main/java/com/luxoft/bankapp/service/BankReportServiceImpl.java): `src/main/java/com/luxoft/bankapp/service/BankReportServiceImpl.java`

### Banking domain

- [Client accounts](https://github.com/mihaita-catalin/bank-app/blob/ex1-t1/src/main/java/com/luxoft/bankapp/model/Client.java): `src/main/java/com/luxoft/bankapp/model/Client.java`
- [Account balances](https://github.com/mihaita-catalin/bank-app/blob/ex1-t1/src/main/java/com/luxoft/bankapp/model/AbstractAccount.java): `src/main/java/com/luxoft/bankapp/model/AbstractAccount.java`
- [Checking rules](https://github.com/mihaita-catalin/bank-app/blob/ex1-t1/src/main/java/com/luxoft/bankapp/model/CheckingAccount.java): `src/main/java/com/luxoft/bankapp/model/CheckingAccount.java`
- [Savings rules](https://github.com/mihaita-catalin/bank-app/blob/ex1-t1/src/main/java/com/luxoft/bankapp/model/SavingAccount.java): `src/main/java/com/luxoft/bankapp/model/SavingAccount.java`

### Client storage

- [Repository contract](https://github.com/mihaita-catalin/bank-app/blob/ex1-t1/src/main/java/com/luxoft/bankapp/service/storage/ClientRepository.java): `src/main/java/com/luxoft/bankapp/service/storage/ClientRepository.java`
- [In-memory clients](https://github.com/mihaita-catalin/bank-app/blob/ex1-t1/src/main/java/com/luxoft/bankapp/service/storage/MapClientRepository.java): `src/main/java/com/luxoft/bankapp/service/storage/MapClientRepository.java`

### Other components

- **Bank user**

## Connections

- Bank user → Demo workflow: runs demo (evidence: `src/main/java/BankApplication.java`)
- Demo workflow → Banking operations: calls operations (evidence: `src/main/java/BankApplication.java`)
- Demo workflow → Bank reports: invokes reports (evidence: `src/main/java/BankApplication.java`)
- Banking operations → Repository contract: uses contract (evidence: `src/main/java/com/luxoft/bankapp/service/BankingImpl.java`)
- Bank reports → Repository contract: reads clients (evidence: `src/main/java/com/luxoft/bankapp/service/BankReportServiceImpl.java`)
- Repository contract → In-memory clients: implemented by (evidence: `src/main/java/com/luxoft/bankapp/service/storage/MapClientRepository.java`)
- Banking operations → Client accounts: manages clients (evidence: `src/main/java/com/luxoft/bankapp/service/BankingImpl.java`)
- Client accounts → Repository contract: updates state (evidence: `src/main/java/com/luxoft/bankapp/model/Client.java`)
- Client accounts → Account balances: delegates balance (evidence: `src/main/java/com/luxoft/bankapp/model/Client.java`)
- Checking rules → Account balances: extends balance (evidence: `src/main/java/com/luxoft/bankapp/model/CheckingAccount.java`)
- Savings rules → Account balances: extends balance (evidence: `src/main/java/com/luxoft/bankapp/model/SavingAccount.java`)
- Banking operations → Checking rules: creates accounts (evidence: `src/main/java/com/luxoft/bankapp/service/BankingImpl.java`)
- Banking operations → Savings rules: creates accounts (evidence: `src/main/java/com/luxoft/bankapp/service/BankingImpl.java`)
- Bank reports → Client accounts: aggregates clients (evidence: `src/main/java/com/luxoft/bankapp/service/BankReportServiceImpl.java`)
- Bank reports → Account balances: sums balances (evidence: `src/main/java/com/luxoft/bankapp/service/BankReportServiceImpl.java`)
