# wouter8/wv8.finance.back-end architecture

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

- Interactive diagram: https://gitdiagram.com/wouter8/wv8.finance.back-end
- Repository: https://github.com/wouter8/wv8.finance.back-end

## Overview

Wv8.Finance.Back-End is a personal-finance API for managing accounts, categories, budgets, transactions, recurring transactions, reports, and Splitwise-linked expenses. The main workflow is an API request reaching a domain manager, which validates or transforms finance data and reads or writes the database; transaction processing can also synchronize Splitwise activity. Controllers and several managers are supported by sampled source, while other product branches are represented from the repository tree. Links to unsampled implementations are limited to their visible API entry points.

Main entry points: [`Wv8.Finance.Back-End/Data/Context.cs`](https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Data/Context.cs) (Finance context), [`Wv8.Finance.Back-End/Business/Transaction/TransactionManager.cs`](https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Business/Transaction/TransactionManager.cs) (Transaction manager), [`Wv8.Finance.Back-End/Business/Transaction/RecurringTransaction/RecurringTransactionManager.cs`](https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Business/Transaction/RecurringTransaction/RecurringTransactionManager.cs) (Recurring manager), [`Wv8.Finance.Back-End/Business/Splitwise/SplitwiseManager.cs`](https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Business/Splitwise/SplitwiseManager.cs) (Splitwise manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API"]
  node_transaction_api["Transaction API"]
  node_account_api["Account API"]
  node_category_api["Category API"]
  node_budget_api["Budget API"]
  node_recurring_api["Recurring API"]
  node_report_api["Report API"]
  node_splitwise_api["Splitwise API"]
end

subgraph group_domain["Finance domain"]
  node_transaction_manager["Transaction manager"]
  node_transaction_processor["Transaction processor"]
  node_account_manager["Account manager<br/>[AccountManager.cs]"]
  node_category_manager["Category manager<br/>[CategoryManager.cs]"]
  node_budget_manager["Budget manager<br/>[BudgetManager.cs]"]
  node_recurring_manager["Recurring manager"]
  node_report_manager["Report manager<br/>[ReportManager.cs]"]
  node_splitwise_manager["Splitwise manager"]
end

subgraph group_storage["Persistence"]
  node_context["Finance context<br/>[Context.cs]"]
  node_finance_store[("Finance database")]
end

subgraph group_integration["Background and external"]
  node_periodic_processor["Periodic processor"]
  node_periodic_importer["Periodic importer"]
  node_splitwise_context["Splitwise client"]
end

node_client(("API client"))
node_splitwise_service(("Splitwise"))

node_client -->|"requests"| node_transaction_api
node_client -->|"requests"| node_account_api
node_client -->|"requests"| node_category_api
node_client -->|"requests"| node_budget_api
node_client -->|"requests"| node_recurring_api
node_client -->|"requests"| node_report_api
node_client -->|"requests"| node_splitwise_api
node_transaction_api -->|"dispatches"| node_transaction_manager
node_account_api -->|"dispatches"| node_account_manager
node_category_api -->|"dispatches"| node_category_manager
node_budget_api -->|"dispatches"| node_budget_manager
node_recurring_api -->|"dispatches"| node_recurring_manager
node_report_api -->|"dispatches"| node_report_manager
node_splitwise_api -->|"dispatches"| node_splitwise_manager
node_transaction_manager -->|"processes"| node_transaction_processor
node_recurring_manager -->|"processes"| node_transaction_processor
node_splitwise_manager -->|"processes"| node_transaction_processor
node_transaction_manager -->|"reads/writes"| node_context
node_account_manager -->|"reads/writes"| node_context
node_category_manager -->|"reads/writes"| node_context
node_budget_manager -->|"reads/writes"| node_context
node_recurring_manager -->|"reads/writes"| node_context
node_report_manager -->|"queries"| node_context
node_splitwise_manager -->|"reads/writes"| node_context
node_context -->|"persists"| node_finance_store
node_transaction_processor -->|"updates"| node_context
node_transaction_manager -->|"uses"| node_splitwise_context
node_recurring_manager -->|"uses"| node_splitwise_context
node_splitwise_manager -->|"fetches expenses"| node_splitwise_context
node_splitwise_context -->|"API calls"| node_splitwise_service

click node_transaction_api "https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Service/Controllers/TransactionController.cs"
click node_account_api "https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Service/Controllers/AccountController.cs"
click node_category_api "https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Service/Controllers/CategoryController.cs"
click node_budget_api "https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Service/Controllers/BudgetController.cs"
click node_recurring_api "https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Service/Controllers/RecurringTransactionController.cs"
click node_report_api "https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Service/Controllers/ReportController.cs"
click node_splitwise_api "https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Service/Controllers/SplitwiseController.cs"
click node_transaction_manager "https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Business/Transaction/TransactionManager.cs"
click node_transaction_processor "https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Business/Transaction/Processor/TransactionProcessor.cs"
click node_account_manager "https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Business/Account/AccountManager.cs"
click node_category_manager "https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Business/Category/CategoryManager.cs"
click node_budget_manager "https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Business/Budget/BudgetManager.cs"
click node_recurring_manager "https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Business/Transaction/RecurringTransaction/RecurringTransactionManager.cs"
click node_report_manager "https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Business/Report/ReportManager.cs"
click node_splitwise_manager "https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Business/Splitwise/SplitwiseManager.cs"
click node_context "https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Data/Context.cs"
click node_finance_store "https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Data/Models/TransactionEntity.cs"
click node_periodic_processor "https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Service/Services/PeriodicProcessorService.cs"
click node_periodic_importer "https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Service/Services/PeriodicSplitwiseImporter.cs"
click node_splitwise_context "https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Data.External/Splitwise/SplitwiseContext.cs"

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_transaction_api,node_account_api,node_category_api,node_budget_api,node_recurring_api,node_report_api,node_splitwise_api,node_client toneBlue
class node_transaction_manager,node_transaction_processor,node_account_manager,node_category_manager,node_budget_manager,node_recurring_manager,node_report_manager,node_splitwise_manager toneAmber
class node_context,node_finance_store toneMint
class node_periodic_processor,node_periodic_importer,node_splitwise_context toneRose
class node_splitwise_service toneIndigo
```

## Components

### API

- [Transaction API](https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Service/Controllers/TransactionController.cs): `Wv8.Finance.Back-End/Service/Controllers/TransactionController.cs`
- [Account API](https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Service/Controllers/AccountController.cs): `Wv8.Finance.Back-End/Service/Controllers/AccountController.cs`
- [Category API](https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Service/Controllers/CategoryController.cs): `Wv8.Finance.Back-End/Service/Controllers/CategoryController.cs`
- [Budget API](https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Service/Controllers/BudgetController.cs): `Wv8.Finance.Back-End/Service/Controllers/BudgetController.cs`
- [Recurring API](https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Service/Controllers/RecurringTransactionController.cs): `Wv8.Finance.Back-End/Service/Controllers/RecurringTransactionController.cs`
- [Report API](https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Service/Controllers/ReportController.cs): `Wv8.Finance.Back-End/Service/Controllers/ReportController.cs`
- [Splitwise API](https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Service/Controllers/SplitwiseController.cs): `Wv8.Finance.Back-End/Service/Controllers/SplitwiseController.cs`

### Finance domain

- [Transaction manager](https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Business/Transaction/TransactionManager.cs): `Wv8.Finance.Back-End/Business/Transaction/TransactionManager.cs`
- [Transaction processor](https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Business/Transaction/Processor/TransactionProcessor.cs): `Wv8.Finance.Back-End/Business/Transaction/Processor/TransactionProcessor.cs`
- [Account manager](https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Business/Account/AccountManager.cs): `Wv8.Finance.Back-End/Business/Account/AccountManager.cs`
- [Category manager](https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Business/Category/CategoryManager.cs): `Wv8.Finance.Back-End/Business/Category/CategoryManager.cs`
- [Budget manager](https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Business/Budget/BudgetManager.cs): `Wv8.Finance.Back-End/Business/Budget/BudgetManager.cs`
- [Recurring manager](https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Business/Transaction/RecurringTransaction/RecurringTransactionManager.cs): `Wv8.Finance.Back-End/Business/Transaction/RecurringTransaction/RecurringTransactionManager.cs`
- [Report manager](https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Business/Report/ReportManager.cs): `Wv8.Finance.Back-End/Business/Report/ReportManager.cs`
- [Splitwise manager](https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Business/Splitwise/SplitwiseManager.cs): `Wv8.Finance.Back-End/Business/Splitwise/SplitwiseManager.cs`

### Persistence

- [Finance context](https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Data/Context.cs): `Wv8.Finance.Back-End/Data/Context.cs`
- [Finance database](https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Data/Models/TransactionEntity.cs): `Wv8.Finance.Back-End/Data/Models/TransactionEntity.cs`

### Background and external

- [Periodic processor](https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Service/Services/PeriodicProcessorService.cs): `Wv8.Finance.Back-End/Service/Services/PeriodicProcessorService.cs`
- [Periodic importer](https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Service/Services/PeriodicSplitwiseImporter.cs): `Wv8.Finance.Back-End/Service/Services/PeriodicSplitwiseImporter.cs`
- [Splitwise client](https://github.com/wouter8/wv8.finance.back-end/blob/master/Wv8.Finance.Back-End/Data.External/Splitwise/SplitwiseContext.cs): `Wv8.Finance.Back-End/Data.External/Splitwise/SplitwiseContext.cs`

### Other components

- **API client**
- **Splitwise**

## Connections

- API client → Transaction API: requests
- API client → Account API: requests
- API client → Category API: requests
- API client → Budget API: requests
- API client → Recurring API: requests
- API client → Report API: requests
- API client → Splitwise API: requests
- Transaction API → Transaction manager: dispatches
- Account API → Account manager: dispatches
- Category API → Category manager: dispatches
- Budget API → Budget manager: dispatches
- Recurring API → Recurring manager: dispatches
- Report API → Report manager: dispatches
- Splitwise API → Splitwise manager: dispatches
- Transaction manager → Transaction processor: processes
- Recurring manager → Transaction processor: processes
- Splitwise manager → Transaction processor: processes
- Transaction manager → Finance context: reads/writes
- Account manager → Finance context: reads/writes
- Category manager → Finance context: reads/writes
- Budget manager → Finance context: reads/writes
- Recurring manager → Finance context: reads/writes
- Report manager → Finance context: queries
- Splitwise manager → Finance context: reads/writes
- Finance context → Finance database: persists
- Transaction processor → Finance context: updates
- Transaction manager → Splitwise client: uses
- Recurring manager → Splitwise client: uses
- Splitwise manager → Splitwise client: fetches expenses
- Splitwise client → Splitwise: API calls
