Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
156 commits
Select commit Hold shift + click to select a range
732b3d5
feat: Web host + ASP.Net Core Identity
nvsnkv Feb 20, 2025
9bfdea4
chore: removed scaffolded compose file
nvsnkv Feb 20, 2025
6264771
chore: removed IISExpress config
nvsnkv Feb 20, 2025
4d38a99
feat(auth): OpenIddict auth
nvsnkv Feb 23, 2025
a6fd78b
wip(db-migrations): fixed DI for migrators
nvsnkv Feb 23, 2025
6ff3e82
fix(auth): fixed DI + enabled cookie auth
nvsnkv Feb 24, 2025
e703ebf
feat: web controllers assembly
nvsnkv Feb 24, 2025
ba3d125
chore: UserCache initialization
nvsnkv Feb 24, 2025
5755153
chore: updated auth api
nvsnkv Mar 1, 2025
7730213
feat: BudgetController
nvsnkv Mar 1, 2025
347cb55
feat(auth): added explicit login/logout uris
nvsnkv Mar 1, 2025
611734e
chore: split web hosts to server and client
nvsnkv Mar 1, 2025
bcda8a9
feat: web client
nvsnkv Mar 2, 2025
5536e9e
chore: updated paths a bit
nvsnkv Mar 2, 2025
6262bcf
fix: finally fixed auth, works for HTTPS
nvsnkv Mar 2, 2025
7cf5846
feat: frontend app with navbar (by taiga-ui)
nvsnkv Mar 2, 2025
dd7ac8b
fix: added missed files
nvsnkv Mar 3, 2025
d83b3e8
chore: tweaked styles
nvsnkv Mar 3, 2025
56710a8
wip: budgets api
nvsnkv Mar 3, 2025
832c817
feat: new budget
nvsnkv Mar 3, 2025
58d7376
feat: budget selection works (mostly)
nvsnkv Mar 4, 2025
ccdd3d9
fix: budget selector no longer shows "Nothing found"
nvsnkv Mar 4, 2025
d2a4805
сhore: updated new budget form
nvsnkv Mar 4, 2025
a59d4cc
feat: refresh budgets on add/update
nvsnkv Mar 4, 2025
af87717
feat: BudgetConfiguration
nvsnkv May 18, 2025
5821b6b
feat: download budget yaml
nvsnkv May 18, 2025
1896e2e
feat: configuration download and upload buttons
nvsnkv May 21, 2025
ae3840d
fix: display import errors
nvsnkv May 23, 2025
fa714dd
chore(client): bumped readme
nvsnkv Jun 1, 2025
a1e5c9d
feat: CsvReadingOptions handling
nvsnkv Jun 1, 2025
216aa77
chore: fixed postgres version for local debug
nvsnkv Jun 1, 2025
741afc4
feat: import-friendly csv configuration
nvsnkv Jun 1, 2025
fa628f7
chore: compose for debugging
nvsnkv Jun 22, 2025
a577a81
chore: renamed budget-detail to budget-settings
nvsnkv Jun 22, 2025
a010518
wip: styling issues
nvsnkv Jun 22, 2025
52efcd3
fix: fixed less compilation
nvsnkv Jun 22, 2025
1643eb7
fix: added default values for not-null fields
nvsnkv Jun 22, 2025
2f33c9c
feat: budget details in settings
nvsnkv Jun 22, 2025
45a503d
chore: vscode stuff
nvsnkv Jun 23, 2025
f2aaa8e
tests: budgetConfig serialization
nvsnkv Jun 23, 2025
8743155
chore: extracted YamlReader to separate Utils project.
nvsnkv Jun 24, 2025
06330cc
chore: separated Infrastructure.Persistence to its own folder
nvsnkv Jun 25, 2025
317dc47
chore: separated Infrastructure.Console to its own folder
nvsnkv Jun 25, 2025
da9f4cd
feat: Csv files settings storage
nvsnkv Jun 28, 2025
1da9afd
chore: renamed test class
nvsnkv Jun 29, 2025
c6529f0
tests: extended test cases
nvsnkv Jun 29, 2025
e017279
chore: replaced csv settings store
nvsnkv Jun 29, 2025
5191102
feat: db migrator for settings context
nvsnkv Jun 30, 2025
25771d3
feat: datetimekind for file settings
nvsnkv Jun 30, 2025
1dab08c
fix: fixed csv options download and upload!
nvsnkv Jul 1, 2025
ec2078e
feat: replace CSV file settings management in budget host console
nvsnkv Oct 5, 2025
b652cf6
chore: reworking web controllers
nvsnkv Oct 5, 2025
77912a5
chore: yet another Account->Budget rename
nvsnkv Oct 5, 2025
d7d21d3
chore: finished renaming :)
nvsnkv Oct 5, 2025
32a9678
feat: add MediatR requests/commands for IBudgetManager operations
nvsnkv Oct 5, 2025
f15b7d8
feat: add BudgetController with complete budget management API
nvsnkv Oct 6, 2025
c3c934a
refactor: implement optimistic concurrency control for all budget mod…
nvsnkv Oct 6, 2025
27d5e61
feat: add BudgetResponse models with ReadableExpression support
nvsnkv Oct 6, 2025
d9b9924
feat: new budget screens
nvsnkv Oct 6, 2025
ea9c165
fix: bumped TaigaUI to fix textarea
nvsnkv Oct 6, 2025
d02d55a
chore: revamped dev scripts
nvsnkv Oct 6, 2025
6411031
feat: redesign Angular budget UI aligned with BudgetController API
nvsnkv Oct 6, 2025
245f350
fix: translate Russian text to English and fix budget selector naviga…
nvsnkv Oct 7, 2025
3c98da2
feat: add LogbookCriteria editing UI with type-based field selection
nvsnkv Oct 7, 2025
66701f0
feat: implement recursive subcriteria editing in LogbookCriteria
nvsnkv Oct 7, 2025
cf90399
fix: add GET endpoint for individual budget to enable YAML download
nvsnkv Oct 7, 2025
e531613
feat: add YAML upload functionality for budget updates
nvsnkv Oct 7, 2025
2767ebe
refactor: remove redundant upload endpoint, use existing UpdateBudget
nvsnkv Oct 7, 2025
a42c32c
fix: improve YAML upload to handle file content correctly
nvsnkv Oct 8, 2025
120ce07
fix: convert response/request models from records to classes for YAML…
nvsnkv Oct 8, 2025
91cbaf8
fix: change collections from IReadOnlyCollection to List for YAML des…
nvsnkv Oct 8, 2025
033b294
feat: add ValidateModelStateFilter to return 400 on input formatter f…
nvsnkv Oct 9, 2025
38a01e2
fix: removed debugging key
nvsnkv Oct 9, 2025
16d4134
feat: csv settings
nvsnkv Oct 11, 2025
44d60f7
fix: fixed budgetselector
nvsnkv Oct 11, 2025
0a7ca70
feat: yaml settings
nvsnkv Oct 11, 2025
ff57041
chore: adjusted script to start in split console (win only)
nvsnkv Oct 12, 2025
4650b49
fix: fixed dropdowns.
nvsnkv Oct 12, 2025
c0f40b6
feat: Add light/dark theme toggle for Taiga UI
nvsnkv Oct 14, 2025
c5024f0
fix(csv-import):codepages support
nvsnkv Oct 14, 2025
09b5b74
feat: group of logbook criteria
nvsnkv Oct 14, 2025
cdb9dd3
feat: extend logbook criteria nesting to 5 levels and add section tog…
nvsnkv Oct 15, 2025
c09a1c4
feat: Add operations management with REST API and Angular UI
nvsnkv Oct 15, 2025
b14f6e2
feat: implement ICsvFileReader with pattern-based CSV parsing and val…
nvsnkv Oct 16, 2025
dd330b9
refactor: Move CSV parsing from frontend to backend
nvsnkv Oct 16, 2025
bc3e552
fix: File upload button not opening file dialog
nvsnkv Oct 16, 2025
9dda160
fix: bumped coverlet version
nvsnkv Oct 16, 2025
6da7fad
fixed currency mapping issue
nvsnkv Oct 16, 2025
ff1fd07
feat: detailed info about import and updates
nvsnkv Oct 17, 2025
cc1d6a3
chore: removed unused usings
nvsnkv Oct 17, 2025
a09c89e
feat: Display detailed error and success metadata in import results
nvsnkv Oct 17, 2025
d3ea110
feat: Add collapsible sections for errors, successes, and duplicates
nvsnkv Oct 17, 2025
91184a4
feat: Add delete operations UI with criteria-based filtering
nvsnkv Oct 17, 2025
03ae449
refactor: Transform operations list to clean table layout with full t…
nvsnkv Oct 17, 2025
245869f
feat: Add attributes column to operations table
nvsnkv Oct 17, 2025
cf6b0f3
refactor: Display attributes as compact chips like tags
nvsnkv Oct 17, 2025
ae33c48
refactor: Make operations table Excel-like with borders and overflow …
nvsnkv Oct 18, 2025
188e838
feat: Create dedicated delete operations screen
nvsnkv Oct 18, 2025
c76a967
feat: Return structured results from delete endpoint with successes a…
nvsnkv Oct 18, 2025
3521556
chore: simplified controller
nvsnkv Oct 18, 2025
e3f45eb
feat: Improve operations list filters with textarea, dropdown, and ke…
nvsnkv Oct 18, 2025
1088c90
refactor: Use Taiga UI components for currency select and checkbox
nvsnkv Oct 18, 2025
6f60069
fix: Currency dropdown not populating - fix value binding issue
nvsnkv Oct 18, 2025
a4c88e6
debug: Add currency count to label and console logging
nvsnkv Oct 18, 2025
9490f1c
fix: Use tui-combo-box for currency dropdown with proper Taiga UI pat…
nvsnkv Oct 18, 2025
de0f101
cleanup: Remove debug console.log from currency loading
nvsnkv Oct 18, 2025
f2c30ad
revert: Change currency dropdown back to text input
nvsnkv Oct 18, 2025
0f4f5a9
cleanup: Remove unused CurrenciesController
nvsnkv Oct 18, 2025
3f03a42
refactor: Remove redundant budget property from operations-list
nvsnkv Oct 18, 2025
82ea118
refactor: Remove redundant budget info from import and delete operations
nvsnkv Oct 18, 2025
3f8de66
feat: Improve formatting in operations list
nvsnkv Oct 18, 2025
5f1de0e
fix: Enforce single-line display for amount column
nvsnkv Oct 18, 2025
4f70fca
chore: removed max-width limits
nvsnkv Oct 19, 2025
5df9e49
refactor: Extract reusable operations-table component
nvsnkv Oct 19, 2025
7ccd824
cleanup: Remove unused duplicate display CSS
nvsnkv Oct 19, 2025
923920b
cleanup: Remove unused formatOperationSummary method
nvsnkv Oct 19, 2025
467fc68
feat: Add delete action button to operations table
nvsnkv Oct 19, 2025
4d102ea
feat: Add inline edit functionality to operations table
nvsnkv Oct 19, 2025
d601ec6
fix: fixed update behavior
nvsnkv Oct 19, 2025
f404ef8
feat: Add duplicates list screen
nvsnkv Oct 19, 2025
10ea575
refactor: Make operations list the default budget view
nvsnkv Oct 19, 2025
a92f0ee
refactor: Rename 'Back to Budget' buttons to 'Budget Details'
nvsnkv Oct 20, 2025
4d9ec0b
feat: Enable operation actions in duplicates list
nvsnkv Oct 20, 2025
5779d43
refactor(operations): extract shared components, services, and utilities
nvsnkv Oct 20, 2025
d2ad2ff
feat: Add retag operations feature and improve criteria-filter component
nvsnkv Oct 20, 2025
2db5a06
feat: Add operations logbook view with hierarchical statistics
nvsnkv Oct 21, 2025
a61d123
refactor: Improve logbook view with table layout and range support
nvsnkv Oct 21, 2025
dc1b6a8
feat: Add logbook tree state preservation
nvsnkv Oct 23, 2025
3c1768a
feat: optional currency
nvsnkv Oct 23, 2025
cc3d3ca
fix: Replace invalid custom CSS variables with proper Taiga UI variables
nvsnkv Oct 23, 2025
9681961
Remove all console-related C# code and projects
nvsnkv Oct 25, 2025
48b6418
docs: Complete README with hosting, budget settings, logbook criteria…
nvsnkv Nov 22, 2025
db54eb4
Update README.md
nvsnkv Nov 22, 2025
d23d5f4
Update README.md
nvsnkv Nov 22, 2025
2c7f359
Update README.md
nvsnkv Nov 23, 2025
73ad08a
Add transfers management API and UI
nvsnkv Nov 23, 2025
4b1be30
Add OrderHistorically extension methods to reduce code duplication
nvsnkv Nov 23, 2025
2dcec3d
feat(transfers)!: reworked transfers handling:
nvsnkv Nov 24, 2025
1cfe5a8
Fix transfers list template error and refactor to use async pipe
nvsnkv Nov 25, 2025
fd02606
Fix Angular compiler warnings: remove unnecessary optional chaining a…
nvsnkv Nov 25, 2025
58ed556
fix(operations): fixed import parsing errors serialization
nvsnkv Nov 30, 2025
67ed8cc
chore: removed build warinings
nvsnkv Nov 30, 2025
576f9e0
fix(transfers): fixed transfers tagging
nvsnkv Nov 30, 2025
dc906e0
fix(tests): fixed build warning
nvsnkv Nov 30, 2025
73e8fc1
chore(logbook): order substitutions alphabetically
nvsnkv Nov 30, 2025
a8bd35d
fix(operations): fixed currencies conversion
nvsnkv Dec 2, 2025
66b1d9c
feat(operations): streamlined operations form, added viable defaults
nvsnkv Dec 2, 2025
0c9e7ed
feat: compacted logbook layout
nvsnkv Dec 2, 2025
158b792
chrore: reordered buttons on transfer list
nvsnkv Jan 17, 2026
bad70e2
fix: fixed redundant import TS-998113
nvsnkv Jan 17, 2026
e5c9603
Fix ReplaceTypeVisitor recursion
nvsnkv Jan 17, 2026
ed8ceaf
Fix empty criteria logbook
nvsnkv Jan 17, 2026
df1fd2a
chore: release script
nvsnkv Jan 18, 2026
bb9ed3e
feat: docker compose for release
nvsnkv Jan 18, 2026
d086f71
chore: release compose looks working now, yay!
nvsnkv Jan 20, 2026
a057141
minor tweaks and fixes
nvsnkv Jan 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
7 changes: 5 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
/src/.idea/
/src/.idea/
bin
obj
*.user
/dist/
/dist/
server.env
certs/
docker-registry-config.json
35 changes: 35 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"version": "0.2.0",
"configurations": [
{
// Use IntelliSense to find out which attributes exist for C# debugging
// Use hover for the description of the existing attributes
// For further information visit https://github.com/dotnet/vscode-csharp/blob/main/debugger-launchjson.md.
"name": ".NET Core Launch (web)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
// If you have changed target frameworks, make sure to update the program path.
"program": "${workspaceFolder}/src/Hosts/NVs.Budget.Hosts.Web.Server/bin/Debug/net8.0/NVs.Budget.Hosts.Web.Server.dll",
"args": [],
"cwd": "${workspaceFolder}/src/Hosts/NVs.Budget.Hosts.Web.Server",
"stopAtEntry": false,
// Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser
"serverReadyAction": {
"action": "openExternally",
"pattern": "\\bNow listening on:\\s+(https?://\\S+)"
},
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"sourceFileMap": {
"/Views": "${workspaceFolder}/Views"
}
},
{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach"
}
]
}
41 changes: 41 additions & 0 deletions .vscode/tasks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/src/NVs.Budget.sln",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary;ForceNoAlign"
],
"problemMatcher": "$msCompile"
},
{
"label": "publish",
"command": "dotnet",
"type": "process",
"args": [
"publish",
"${workspaceFolder}/src/NVs.Budget.sln",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary;ForceNoAlign"
],
"problemMatcher": "$msCompile"
},
{
"label": "watch",
"command": "dotnet",
"type": "process",
"args": [
"watch",
"run",
"--project",
"${workspaceFolder}/src/NVs.Budget.sln"
],
"problemMatcher": "$msCompile"
}
]
}
222 changes: 222 additions & 0 deletions DEVELOPMENT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,222 @@
# Local Development Guide

This guide covers setting up and running the Budget application for local development.

## Prerequisites

### Required Software
- Docker Desktop
- PowerShell 7+ (for Windows) or Bash (for Linux/Mac)
- .NET SDK 8.0+
- Node.js 20+
- npm

## Quick Start

The easiest way to start development is using the scripts in `src/Hosts/web-debug/`:

```powershell
cd src/Hosts/web-debug
.\start-all.ps1
```

This will:
1. Start PostgreSQL database in Docker
2. Generate SSL certificates
3. Launch the .NET server with watch mode
4. Launch the Angular client with watch mode

## Configuration

### 1. Environment Setup

1. Navigate to `src/Hosts/web-debug/`
2. Copy `server.env.example` to `server.env`
3. Fill in your Yandex OAuth credentials:
```
Auth__Yandex__ClientSecret = your_client_secret
Auth__Yandex__ClientId = your_client_id
```

### 2. Database Setup

The development setup uses Docker Compose to run PostgreSQL. The database is automatically created when you run `docker compose up -d`.

**Connection Details:**
- Host: `localhost`
- Port: `20000`
- Database: `budgetdb`
- User: `postgres`
- Password: `postgres`

## Service URLs

Once all services are running:

- **Server (HTTPS)**: https://localhost:7237
- **Server (HTTP)**: http://localhost:5153
- **Client**: https://localhost:4200
- **PostgreSQL**: localhost:20000

## Development Workflow

1. **Start all services**:
```powershell
cd src/Hosts/web-debug
.\start-all.ps1
```

2. **Make changes** to your code in the editor

3. **Watch mode automatically reloads**:
- **.NET Server**: `dotnet watch` detects changes and rebuilds/restarts
- **Angular Client**: Hot Module Replacement (HMR) updates the browser

4. **View changes** in your browser at http://localhost:4200

## Starting Services Individually

### Start only Docker dependencies
```powershell
cd src/Hosts/web-debug
docker compose up -d
```

### Start only the server
```powershell
cd src/Hosts/web-debug
.\start-server.ps1
```

### Start only the client
```powershell
cd src/Hosts/web-debug
.\start-client.ps1
```

### Stop all services
```powershell
cd src/Hosts/web-debug
.\stop-all.ps1
```

Then manually stop server/client processes (Ctrl+C in their windows).

## Database Management

### Apply Migrations

After starting the services, apply database migrations:
```bash
GET https://localhost:7237/admin/patch-db
```

Or use curl:
```bash
curl -k https://localhost:7237/admin/patch-db
```

### Reset Database

To completely reset the database (removes all data):
```powershell
cd src/Hosts/web-debug
docker compose down -v
```

This removes the Docker volume containing PostgreSQL data. The database will be recreated on next start.

## Troubleshooting

### Certificate Issues

If you encounter SSL certificate errors:

```powershell
cd src/Hosts/web-debug
# Delete the certs directory
Remove-Item -Recurse -Force .\certs

# Restart services to regenerate certificates
.\start-all.ps1
```

### Database Connection Issues

```powershell
cd src/Hosts/web-debug
# Check if PostgreSQL is running
docker compose ps

# View PostgreSQL logs
docker compose logs postgres

# Restart PostgreSQL
docker compose restart postgres
```

### Port Already in Use

If ports are already in use, stop any conflicting services:
- Server: 7237 (HTTPS), 5153 (HTTP)
- Client: 4200
- PostgreSQL: 20000

### Server Won't Start

1. Check that PostgreSQL is running: `docker compose ps`
2. Verify connection strings in `server.env`
3. Check server logs in the PowerShell window where it's running
4. Ensure ports 7237 and 5153 are not in use

### Client Won't Start

1. Verify Node.js and npm are installed: `node --version` and `npm --version`
2. Check that port 4200 is not in use
3. Try deleting `node_modules` and reinstalling:
```bash
cd src/Hosts/NVs.Budget.Hosts.Web.Client/budget-client
rm -rf node_modules
npm install
```

## Project Structure

```
src/Hosts/web-debug/
├── docker-compose.yml # Docker services (postgres, dev-certs)
├── dev-certs.Dockerfile # Certificate generation
├── server.env # Server environment variables (gitignored)
├── server.env.example # Template for server.env
├── start-all.ps1 # Master script to start everything
├── start-server.ps1 # Start .NET server on host
├── start-client.ps1 # Start Angular client on host
├── stop-all.ps1 # Stop Docker services
└── README.md # Additional details
```

## Docker Volumes

The development setup creates persistent Docker volumes:

- `web-debug_budgetdb-data`: PostgreSQL data (persistent across restarts)
- `web-debug_certs`: SSL certificates

To remove all volumes and start fresh:
```powershell
docker compose down -v
```

## Benefits of This Development Setup

✅ **Fast Iteration**: Watch mode catches changes instantly
✅ **Better Debugging**: Direct access to processes on host
✅ **Isolated Dependencies**: Database runs in Docker
✅ **Flexible Development**: Start/stop services independently
✅ **Production-like**: SSL certificates and proper configuration

## Additional Resources

For more detailed information about the development scripts, see:
- [src/Hosts/web-debug/README.md](src/Hosts/web-debug/README.md) - Detailed documentation of development scripts

Loading