# maxmonice/javabank architecture

> Architecture diagram of the GitHub repository maxmonice/javabank, 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/maxmonice/javabank
- Repository: https://github.com/maxmonice/javabank

## Overview

Polarity Bank has two parallel runtime surfaces: a Java console banking workflow backed by JDBC, and an evolving Spring Boot REST backend. The console path handles PIN-format checks, account authentication, account display, deposits and withdrawals, with balance changes persisted to MariaDB/MySQL. The backend currently shows application startup and simple greeting routes; the account endpoint and request DTO are present but their implementation excerpts are empty. The README documents broader backend intent, not a demonstrated connection to the console banking logic.

Main entry points: [`src/main/java/JavaBank/Database.java`](https://github.com/maxmonice/javabank/blob/main/src/main/java/JavaBank/Database.java) (JDBC access), [`src/main/java/JavaBank/UI.java`](https://github.com/maxmonice/javabank/blob/main/src/main/java/JavaBank/UI.java) (Terminal interface), [`src/main/java/JavaBank/BankAccount.java`](https://github.com/maxmonice/javabank/blob/main/src/main/java/JavaBank/BankAccount.java) (Bank account), [`javabank-backend/src/main/java/com/javabank/JavabankBackendApplication.java`](https://github.com/maxmonice/javabank/blob/main/javabank-backend/src/main/java/com/javabank/JavabankBackendApplication.java) (Spring application)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_console["Console Banking"]
  node_program["Console entry<br/>[Program.java]"]
  node_terminal["Terminal interface<br/>[UI.java]"]
end

subgraph group_domain["Account Domain"]
  node_account["Bank account<br/>[BankAccount.java]"]
  node_current["Current account"]
  node_savings["Savings account"]
  node_auth_errors["Authentication exceptions"]
end

subgraph group_persistence["JDBC Persistence"]
  node_database_client["JDBC access<br/>[Database.java]"]
  node_pin_hash["PIN verification"]
  node_bank_store[("Accounts database<br/>[setup.sql]")]
end

subgraph group_backend["Spring REST Backend"]
  node_spring_app["Spring application"]
  node_hello_routes["Greeting routes"]
  node_account_routes["Account endpoint"]
  node_account_request["Account request DTO"]
end

node_customer(("Bank customer"))
node_api_client(("API consumer"))

node_customer -->|"launches"| node_program
node_program -->|"starts"| node_terminal
node_customer -->|"enters credentials"| node_terminal
node_terminal -->|"authenticates account"| node_database_client
node_terminal -->|"uses account"| node_account
node_terminal -->|"handles authentication errors"| node_auth_errors
node_database_client -->|"throws"| node_auth_errors
node_database_client -->|"constructs account"| node_account
node_database_client -->|"verifies PIN"| node_pin_hash
node_account -->|"updates balance"| node_database_client
node_database_client -->|"queries and updates"| node_bank_store
node_api_client -->|"requests routes"| node_hello_routes
node_api_client -.->|"requests account API"| node_account_routes
node_spring_app -.->|"serves routes"| node_hello_routes
node_spring_app -.->|"serves routes"| node_account_routes

click node_program "https://github.com/maxmonice/javabank/blob/main/src/main/java/JavaBank/Program.java"
click node_terminal "https://github.com/maxmonice/javabank/blob/main/src/main/java/JavaBank/UI.java"
click node_account "https://github.com/maxmonice/javabank/blob/main/src/main/java/JavaBank/BankAccount.java"
click node_current "https://github.com/maxmonice/javabank/blob/main/src/main/java/JavaBank/CurrentAccount.java"
click node_savings "https://github.com/maxmonice/javabank/blob/main/src/main/java/JavaBank/SavingsAccount.java"
click node_auth_errors "https://github.com/maxmonice/javabank/tree/main/src/main/java/JavaBank/Exceptions"
click node_database_client "https://github.com/maxmonice/javabank/blob/main/src/main/java/JavaBank/Database.java"
click node_pin_hash "https://github.com/maxmonice/javabank/blob/main/src/main/java/JavaBank/PasswordHasher.java"
click node_bank_store "https://github.com/maxmonice/javabank/blob/main/Database/setup.sql"
click node_spring_app "https://github.com/maxmonice/javabank/blob/main/javabank-backend/src/main/java/com/javabank/JavabankBackendApplication.java"
click node_hello_routes "https://github.com/maxmonice/javabank/blob/main/javabank-backend/src/main/java/com/javabank/Controller/HelloController.java"
click node_account_routes "https://github.com/maxmonice/javabank/blob/main/javabank-backend/src/main/java/com/javabank/Controller/AccountController.java"
click node_account_request "https://github.com/maxmonice/javabank/blob/main/javabank-backend/src/main/java/com/javabank/DataTransferObject/AccountRequest.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_program,node_terminal toneBlue
class node_account,node_current,node_savings,node_auth_errors toneAmber
class node_database_client,node_pin_hash,node_bank_store,node_api_client toneMint
class node_spring_app,node_hello_routes,node_account_routes,node_account_request toneRose
class node_customer toneIndigo
```

## Components

### Console Banking

- [Console entry](https://github.com/maxmonice/javabank/blob/main/src/main/java/JavaBank/Program.java): `src/main/java/JavaBank/Program.java`
- [Terminal interface](https://github.com/maxmonice/javabank/blob/main/src/main/java/JavaBank/UI.java): `src/main/java/JavaBank/UI.java`

### Account Domain

- [Bank account](https://github.com/maxmonice/javabank/blob/main/src/main/java/JavaBank/BankAccount.java): `src/main/java/JavaBank/BankAccount.java`
- [Current account](https://github.com/maxmonice/javabank/blob/main/src/main/java/JavaBank/CurrentAccount.java): `src/main/java/JavaBank/CurrentAccount.java`
- [Savings account](https://github.com/maxmonice/javabank/blob/main/src/main/java/JavaBank/SavingsAccount.java): `src/main/java/JavaBank/SavingsAccount.java`
- [Authentication exceptions](https://github.com/maxmonice/javabank/tree/main/src/main/java/JavaBank/Exceptions): `src/main/java/JavaBank/Exceptions`

### JDBC Persistence

- [JDBC access](https://github.com/maxmonice/javabank/blob/main/src/main/java/JavaBank/Database.java): `src/main/java/JavaBank/Database.java`
- [PIN verification](https://github.com/maxmonice/javabank/blob/main/src/main/java/JavaBank/PasswordHasher.java): `src/main/java/JavaBank/PasswordHasher.java`
- [Accounts database](https://github.com/maxmonice/javabank/blob/main/Database/setup.sql): `Database/setup.sql`

### Spring REST Backend

- [Spring application](https://github.com/maxmonice/javabank/blob/main/javabank-backend/src/main/java/com/javabank/JavabankBackendApplication.java): `javabank-backend/src/main/java/com/javabank/JavabankBackendApplication.java`
- [Greeting routes](https://github.com/maxmonice/javabank/blob/main/javabank-backend/src/main/java/com/javabank/Controller/HelloController.java): `javabank-backend/src/main/java/com/javabank/Controller/HelloController.java`
- [Account endpoint](https://github.com/maxmonice/javabank/blob/main/javabank-backend/src/main/java/com/javabank/Controller/AccountController.java): `javabank-backend/src/main/java/com/javabank/Controller/AccountController.java`
- [Account request DTO](https://github.com/maxmonice/javabank/blob/main/javabank-backend/src/main/java/com/javabank/DataTransferObject/AccountRequest.java): `javabank-backend/src/main/java/com/javabank/DataTransferObject/AccountRequest.java`

### Other components

- **Bank customer**
- **API consumer**

## Connections

- Bank customer → Console entry: launches (evidence: `README.md`)
- Console entry → Terminal interface: starts (evidence: `src/main/java/JavaBank/Program.java`)
- Bank customer → Terminal interface: enters credentials (evidence: `src/main/java/JavaBank/UI.java`)
- Terminal interface → JDBC access: authenticates account (evidence: `src/main/java/JavaBank/UI.java`)
- Terminal interface → Bank account: uses account (evidence: `src/main/java/JavaBank/UI.java`)
- Terminal interface → Authentication exceptions: handles authentication errors (evidence: `src/main/java/JavaBank/UI.java`)
- JDBC access → Authentication exceptions: throws (evidence: `src/main/java/JavaBank/Database.java`)
- JDBC access → Bank account: constructs account (evidence: `src/main/java/JavaBank/Database.java`)
- JDBC access → PIN verification: verifies PIN (evidence: `src/main/java/JavaBank/Database.java`)
- Bank account → JDBC access: updates balance (evidence: `src/main/java/JavaBank/BankAccount.java`)
- JDBC access → Accounts database: queries and updates (evidence: `src/main/java/JavaBank/Database.java`)
- API consumer → Greeting routes: requests routes (evidence: `README.md`)
- API consumer → Account endpoint: requests account API (evidence: `README.md`)
- Spring application → Greeting routes: serves routes (evidence: `README.md`)
- Spring application → Account endpoint: serves routes (evidence: `README.md`)
