# razdryzg-dev/finance-planner architecture

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

- Interactive diagram: https://gitdiagram.com/razdryzg-dev/finance-planner
- Repository: https://github.com/razdryzg-dev/finance-planner

## Overview

This is a JavaFX personal-finance planner for recording income and expenses, reviewing filtered transactions and spending summaries, and checking category budgets. The main workflow runs from the desktop UI through transaction entry or review to JDBC persistence, then refreshes balances, expense-category rankings, and budget warnings. Sampled code confirms the UI and transaction/budget data access; other DAO behavior is represented only where the tree and documented JDBC setup support it.

Main entry points: [`src/main/java/com/financeplanner/MainApp.java`](https://github.com/razdryzg-dev/finance-planner/blob/main/src/main/java/com/financeplanner/MainApp.java) (Finance dashboard), [`src/main/java/com/financeplanner/dao/TransactionDAO.java`](https://github.com/razdryzg-dev/finance-planner/blob/main/src/main/java/com/financeplanner/dao/TransactionDAO.java) (Transaction access), [`src/main/java/com/financeplanner/dao/CategoryDAO.java`](https://github.com/razdryzg-dev/finance-planner/blob/main/src/main/java/com/financeplanner/dao/CategoryDAO.java) (Category access), [`src/main/java/com/financeplanner/db/DatabaseConnection.java`](https://github.com/razdryzg-dev/finance-planner/blob/main/src/main/java/com/financeplanner/db/DatabaseConnection.java) (JDBC connection)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Desktop UI"]
  node_mainapp["Finance dashboard<br/>[MainApp.java]"]
  node_entrydialog["Transaction entry"]
end

subgraph group_finance["Finance workflow"]
end

subgraph group_persistence["Data access"]
  node_transactions["Transaction access"]
  node_accounts["Account access<br/>[AccountDAO.java]"]
  node_categories["Category access<br/>[CategoryDAO.java]"]
  node_budgets["Budget access<br/>[BudgetDAO.java]"]
  node_connection["JDBC connection"]
end

subgraph group_domain["Domain models"]
  node_transactionmodel["Transaction<br/>[Transaction.java]"]
  node_budgetmodel["Budget<br/>[Budget.java]"]
  node_accountmodel["Account<br/>[Account.java]"]
  node_categorymodel["Category<br/>[Category.java]"]
end

node_person(("User"))
node_db[("PostgreSQL / MySQL")]

node_person -->|"uses"| node_mainapp
node_mainapp -->|"opens entry"| node_entrydialog
node_mainapp -->|"filters, ranks, deletes"| node_transactions
node_mainapp -->|"checks limits"| node_budgets
node_mainapp -->|"loads categories"| node_categories
node_entrydialog -->|"loads accounts"| node_accounts
node_entrydialog -->|"loads categories"| node_categories
node_entrydialog -->|"creates transaction"| node_transactions
node_accounts -->|"gets connection"| node_connection
node_categories -->|"gets connection"| node_connection
node_transactions -->|"gets connection"| node_connection
node_budgets -->|"gets connection"| node_connection
node_connection -->|"opens JDBC"| node_db
node_accounts -->|"queries"| node_db
node_categories -->|"queries"| node_db
node_transactions -->|"reads, writes"| node_db
node_budgets -->|"reads spending"| node_db
node_transactions -->|"creates"| node_transactionmodel
node_budgets -->|"creates"| node_budgetmodel
node_accounts -->|"creates"| node_accountmodel
node_categories -->|"creates"| node_categorymodel

click node_mainapp "https://github.com/razdryzg-dev/finance-planner/blob/main/src/main/java/com/financeplanner/MainApp.java"
click node_entrydialog "https://github.com/razdryzg-dev/finance-planner/blob/main/src/main/java/com/financeplanner/AddTransactionDialog.java"
click node_transactions "https://github.com/razdryzg-dev/finance-planner/blob/main/src/main/java/com/financeplanner/dao/TransactionDAO.java"
click node_accounts "https://github.com/razdryzg-dev/finance-planner/blob/main/src/main/java/com/financeplanner/dao/AccountDAO.java"
click node_categories "https://github.com/razdryzg-dev/finance-planner/blob/main/src/main/java/com/financeplanner/dao/CategoryDAO.java"
click node_budgets "https://github.com/razdryzg-dev/finance-planner/blob/main/src/main/java/com/financeplanner/dao/BudgetDAO.java"
click node_connection "https://github.com/razdryzg-dev/finance-planner/blob/main/src/main/java/com/financeplanner/db/DatabaseConnection.java"
click node_transactionmodel "https://github.com/razdryzg-dev/finance-planner/blob/main/src/main/java/com/financeplanner/model/Transaction.java"
click node_budgetmodel "https://github.com/razdryzg-dev/finance-planner/blob/main/src/main/java/com/financeplanner/model/Budget.java"
click node_accountmodel "https://github.com/razdryzg-dev/finance-planner/blob/main/src/main/java/com/financeplanner/model/Account.java"
click node_categorymodel "https://github.com/razdryzg-dev/finance-planner/blob/main/src/main/java/com/financeplanner/model/Category.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_mainapp,node_entrydialog,node_person toneBlue
class node_transactions,node_accounts,node_categories,node_budgets,node_connection toneMint
class node_transactionmodel,node_budgetmodel,node_accountmodel,node_categorymodel toneRose
class node_db toneAmber
```

## Components

### Desktop UI

- [Finance dashboard](https://github.com/razdryzg-dev/finance-planner/blob/main/src/main/java/com/financeplanner/MainApp.java): `src/main/java/com/financeplanner/MainApp.java`
- [Transaction entry](https://github.com/razdryzg-dev/finance-planner/blob/main/src/main/java/com/financeplanner/AddTransactionDialog.java): `src/main/java/com/financeplanner/AddTransactionDialog.java`

### Data access

- [Transaction access](https://github.com/razdryzg-dev/finance-planner/blob/main/src/main/java/com/financeplanner/dao/TransactionDAO.java): `src/main/java/com/financeplanner/dao/TransactionDAO.java`
- [Account access](https://github.com/razdryzg-dev/finance-planner/blob/main/src/main/java/com/financeplanner/dao/AccountDAO.java): `src/main/java/com/financeplanner/dao/AccountDAO.java`
- [Category access](https://github.com/razdryzg-dev/finance-planner/blob/main/src/main/java/com/financeplanner/dao/CategoryDAO.java): `src/main/java/com/financeplanner/dao/CategoryDAO.java`
- [Budget access](https://github.com/razdryzg-dev/finance-planner/blob/main/src/main/java/com/financeplanner/dao/BudgetDAO.java): `src/main/java/com/financeplanner/dao/BudgetDAO.java`
- [JDBC connection](https://github.com/razdryzg-dev/finance-planner/blob/main/src/main/java/com/financeplanner/db/DatabaseConnection.java): `src/main/java/com/financeplanner/db/DatabaseConnection.java`

### Domain models

- [Transaction](https://github.com/razdryzg-dev/finance-planner/blob/main/src/main/java/com/financeplanner/model/Transaction.java): `src/main/java/com/financeplanner/model/Transaction.java`
- [Budget](https://github.com/razdryzg-dev/finance-planner/blob/main/src/main/java/com/financeplanner/model/Budget.java): `src/main/java/com/financeplanner/model/Budget.java`
- [Account](https://github.com/razdryzg-dev/finance-planner/blob/main/src/main/java/com/financeplanner/model/Account.java): `src/main/java/com/financeplanner/model/Account.java`
- [Category](https://github.com/razdryzg-dev/finance-planner/blob/main/src/main/java/com/financeplanner/model/Category.java): `src/main/java/com/financeplanner/model/Category.java`

### Other components

- **User**
- **PostgreSQL / MySQL**

## Connections

- User → Finance dashboard: uses
- Finance dashboard → Transaction entry: opens entry
- Finance dashboard → Transaction access: filters, ranks, deletes
- Finance dashboard → Budget access: checks limits
- Finance dashboard → Category access: loads categories
- Transaction entry → Account access: loads accounts
- Transaction entry → Category access: loads categories
- Transaction entry → Transaction access: creates transaction
- Account access → JDBC connection: gets connection
- Category access → JDBC connection: gets connection
- Transaction access → JDBC connection: gets connection
- Budget access → JDBC connection: gets connection
- JDBC connection → PostgreSQL / MySQL: opens JDBC
- Account access → PostgreSQL / MySQL: queries
- Category access → PostgreSQL / MySQL: queries
- Transaction access → PostgreSQL / MySQL: reads, writes
- Budget access → PostgreSQL / MySQL: reads spending
- Transaction access → Transaction: creates
- Budget access → Budget: creates
- Account access → Account: creates
- Category access → Category: creates
