# patrick-plue/budgettrackerwithdb architecture

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

## Overview

BudgetTrackerWithDB is an ASP.NET Core budget-tracking API. Clients enter through the transaction or report endpoints: transaction requests are validated and handled by a service, while report requests compute income, expense, and net totals for a date range. The configured runtime uses EF Core with SQLite; mock services are available as alternatives. The graph preserves the principal DTO and domain stages. Some endpoint and service details are known only through the source index, so unsupported internal links are omitted.

Main entry points: [`Program.cs`](https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Program.cs) (App startup), [`Application/Services/TransactionServiceEf.cs`](https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Application/Services/TransactionServiceEf.cs) (EF transaction service), [`Api/Endpoints/TransactionEndpoints.cs`](https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Api/Endpoints/TransactionEndpoints.cs) (Transaction endpoints), [`Application/Services/ReportServiceEf.cs`](https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Application/Services/ReportServiceEf.cs) (EF report service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["HTTP API"]
  node_program["App startup<br/>[Program.cs]"]
  node_transaction_endpoints["Transaction endpoints"]
  node_report_endpoint["Report endpoint<br/>[ReportEndpoint.cs]"]
  node_validation_filter["Validation filter"]
  node_validation_extensions["Validation extensions"]
end

subgraph group_application["Application Services"]
  node_transaction_contract["Transaction service contract"]
  node_transaction_ef["EF transaction service"]
  node_transaction_mock["Mock transaction service"]
  node_report_contract["Report service contract<br/>[IReportService.cs]"]
  node_report_ef["EF report service<br/>[ReportServiceEf.cs]"]
  node_report_mock["Mock report service"]
end

subgraph group_domain["Domain And DTOs"]
  node_transaction_model["Transaction model<br/>[Transaction.cs]"]
  node_transaction_type["Transaction type<br/>[TransactionType.cs]"]
  node_create_dto["Create transaction DTO"]
  node_update_dto["Update transaction DTO"]
  node_response_dto["Transaction response DTO"]
  node_summary_dto["Summary report DTO"]
end

subgraph group_persistence["Persistence"]
  node_db_context["EF database context"]
  node_sqlite[("SQLite database")]
end

node_client(("API client"))

node_client -->|"sends requests"| node_program
node_program -->|"maps routes"| node_transaction_endpoints
node_program -->|"maps routes"| node_report_endpoint
node_program -->|"registers service"| node_transaction_ef
node_program -->|"registers service"| node_report_ef
node_program -->|"configures EF"| node_db_context
node_transaction_endpoints -->|"calls"| node_transaction_contract
node_report_endpoint -->|"calls"| node_report_contract
node_transaction_ef -->|"queries and saves"| node_db_context
node_transaction_ef -->|"creates and updates"| node_transaction_model
node_transaction_ef -->|"accepts"| node_create_dto
node_transaction_ef -->|"accepts"| node_update_dto
node_report_ef -->|"queries"| node_db_context
node_report_ef -->|"builds report"| node_summary_dto
node_report_ef -->|"classifies totals"| node_transaction_type
node_db_context -->|"stores"| node_transaction_model
node_program -->|"configures provider"| node_sqlite
node_transaction_endpoints -->|"accepts"| node_create_dto
node_transaction_endpoints -->|"accepts"| node_update_dto
node_transaction_endpoints -->|"returns"| node_response_dto
node_create_dto -->|"uses"| node_transaction_type
node_transaction_model -->|"uses"| node_transaction_type
node_transaction_mock -->|"manages"| node_transaction_model
node_transaction_mock -->|"accepts"| node_create_dto
node_transaction_mock -->|"accepts"| node_update_dto
node_report_mock -->|"builds report"| node_summary_dto
node_report_mock -->|"uses data"| node_transaction_model
node_transaction_contract -.->|"implemented by"| node_transaction_ef
node_report_contract -.->|"implemented by"| node_report_ef
node_validation_extensions -->|"references"| node_validation_filter

click node_program "https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Program.cs"
click node_transaction_endpoints "https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Api/Endpoints/TransactionEndpoints.cs"
click node_report_endpoint "https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Api/Endpoints/ReportEndpoint.cs"
click node_validation_filter "https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Api/Filters/ValidationFilter.cs"
click node_validation_extensions "https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Api/Filters/ValidationExtensions.cs"
click node_transaction_contract "https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Application/Interfaces/ITransactionService.cs"
click node_transaction_ef "https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Application/Services/TransactionServiceEf.cs"
click node_transaction_mock "https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Application/Services/TransactionServiceMock.cs"
click node_report_contract "https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Application/Interfaces/IReportService.cs"
click node_report_ef "https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Application/Services/ReportServiceEf.cs"
click node_report_mock "https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Application/Services/ReportServiceMock.cs"
click node_transaction_model "https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Models/Transaction.cs"
click node_transaction_type "https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Models/TransactionType.cs"
click node_create_dto "https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Dtos/Transactions/CreateTransactionDto.cs"
click node_update_dto "https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Dtos/Transactions/UpdateTransactionDto.cs"
click node_response_dto "https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Dtos/Transactions/TransactionResponseDto.cs"
click node_summary_dto "https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Dtos/Reports/SummaryReportResponseDto.cs"
click node_db_context "https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Infrastructure/ApplicationDbContext.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_program,node_transaction_endpoints,node_report_endpoint,node_validation_filter,node_validation_extensions,node_client toneBlue
class node_transaction_contract,node_transaction_ef,node_transaction_mock,node_report_contract,node_report_ef,node_report_mock toneAmber
class node_transaction_model,node_transaction_type,node_create_dto,node_update_dto,node_response_dto,node_summary_dto toneMint
class node_db_context,node_sqlite toneRose
```

## Components

### HTTP API

- [App startup](https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Program.cs): `Program.cs`
- [Transaction endpoints](https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Api/Endpoints/TransactionEndpoints.cs): `Api/Endpoints/TransactionEndpoints.cs`
- [Report endpoint](https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Api/Endpoints/ReportEndpoint.cs): `Api/Endpoints/ReportEndpoint.cs`
- [Validation filter](https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Api/Filters/ValidationFilter.cs): `Api/Filters/ValidationFilter.cs`
- [Validation extensions](https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Api/Filters/ValidationExtensions.cs): `Api/Filters/ValidationExtensions.cs`

### Application Services

- [Transaction service contract](https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Application/Interfaces/ITransactionService.cs): `Application/Interfaces/ITransactionService.cs`
- [EF transaction service](https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Application/Services/TransactionServiceEf.cs): `Application/Services/TransactionServiceEf.cs`
- [Mock transaction service](https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Application/Services/TransactionServiceMock.cs): `Application/Services/TransactionServiceMock.cs`
- [Report service contract](https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Application/Interfaces/IReportService.cs): `Application/Interfaces/IReportService.cs`
- [EF report service](https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Application/Services/ReportServiceEf.cs): `Application/Services/ReportServiceEf.cs`
- [Mock report service](https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Application/Services/ReportServiceMock.cs): `Application/Services/ReportServiceMock.cs`

### Domain And DTOs

- [Transaction model](https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Models/Transaction.cs): `Models/Transaction.cs`
- [Transaction type](https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Models/TransactionType.cs): `Models/TransactionType.cs`
- [Create transaction DTO](https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Dtos/Transactions/CreateTransactionDto.cs): `Dtos/Transactions/CreateTransactionDto.cs`
- [Update transaction DTO](https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Dtos/Transactions/UpdateTransactionDto.cs): `Dtos/Transactions/UpdateTransactionDto.cs`
- [Transaction response DTO](https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Dtos/Transactions/TransactionResponseDto.cs): `Dtos/Transactions/TransactionResponseDto.cs`
- [Summary report DTO](https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Dtos/Reports/SummaryReportResponseDto.cs): `Dtos/Reports/SummaryReportResponseDto.cs`

### Persistence

- [EF database context](https://github.com/patrick-plue/budgettrackerwithdb/blob/main/Infrastructure/ApplicationDbContext.cs): `Infrastructure/ApplicationDbContext.cs`
- **SQLite database**

### Other components

- **API client**

## Connections

- API client → App startup: sends requests
- App startup → Transaction endpoints: maps routes (evidence: `Program.cs`)
- App startup → Report endpoint: maps routes (evidence: `Program.cs`)
- App startup → EF transaction service: registers service (evidence: `Program.cs`)
- App startup → EF report service: registers service (evidence: `Program.cs`)
- App startup → EF database context: configures EF (evidence: `Program.cs`)
- Transaction endpoints → Transaction service contract: calls (evidence: `Api/Endpoints/TransactionEndpoints.cs`)
- Report endpoint → Report service contract: calls (evidence: `Api/Endpoints/ReportEndpoint.cs`)
- EF transaction service → EF database context: queries and saves (evidence: `Application/Services/TransactionServiceEf.cs`)
- EF transaction service → Transaction model: creates and updates (evidence: `Application/Services/TransactionServiceEf.cs`)
- EF transaction service → Create transaction DTO: accepts (evidence: `Application/Services/TransactionServiceEf.cs`)
- EF transaction service → Update transaction DTO: accepts (evidence: `Application/Services/TransactionServiceEf.cs`)
- EF report service → EF database context: queries (evidence: `Application/Services/ReportServiceEf.cs`)
- EF report service → Summary report DTO: builds report (evidence: `Application/Services/ReportServiceEf.cs`)
- EF report service → Transaction type: classifies totals (evidence: `Application/Services/ReportServiceEf.cs`)
- EF database context → Transaction model: stores (evidence: `Infrastructure/ApplicationDbContext.cs`)
- App startup → SQLite database: configures provider (evidence: `Program.cs`)
- Transaction endpoints → Create transaction DTO: accepts (evidence: `Api/Endpoints/TransactionEndpoints.cs`)
- Transaction endpoints → Update transaction DTO: accepts (evidence: `Api/Endpoints/TransactionEndpoints.cs`)
- Transaction endpoints → Transaction response DTO: returns (evidence: `Api/Endpoints/TransactionEndpoints.cs`)
- Create transaction DTO → Transaction type: uses (evidence: `Dtos/Transactions/CreateTransactionDto.cs`)
- Transaction model → Transaction type: uses (evidence: `Models/Transaction.cs`)
- Mock transaction service → Transaction model: manages (evidence: `Application/Services/TransactionServiceMock.cs`)
- Mock transaction service → Create transaction DTO: accepts (evidence: `Application/Services/TransactionServiceMock.cs`)
- Mock transaction service → Update transaction DTO: accepts (evidence: `Application/Services/TransactionServiceMock.cs`)
- Mock report service → Summary report DTO: builds report (evidence: `Application/Services/ReportServiceMock.cs`)
- Mock report service → Transaction model: uses data (evidence: `Application/Services/ReportServiceMock.cs`)
- Transaction service contract → EF transaction service: implemented by (evidence: `Application/Services/TransactionServiceEf.cs`)
- Report service contract → EF report service: implemented by (evidence: `Application/Services/ReportServiceEf.cs`)
- Validation extensions → Validation filter: references (evidence: `Api/Filters/ValidationExtensions.cs`)
