Initial commit: Purrse personal finance app
Self-hosted, plugin-extensible personal finance manager built with ASP.NET Core 9.0, Vue 3 + Vuetify 3, and PostgreSQL 17. Backend (8 .NET projects): - Core: 19 domain models, 6 enums, 14 DTOs, 12 service interfaces - Data: EF Core DbContext, 16 entity configurations, category seeder - API: 14 controllers, 15 services, JWT auth, SignalR, middleware - Plugins: Abstractions + OFX/CSV/QIF file parsers - Tests: 28 xUnit tests (fingerprinting, duplicate detection, parsers) Frontend (Vue 3 + Vuetify 3 + TypeScript): - 13 views, Pinia stores, Axios API services with JWT interceptors - Dashboard, accounts, transactions, categories, imports, and more Deployment: - Docker Compose (PostgreSQL 17 + .NET API + nginx frontend) - Auto-migration on startup Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
+144
@@ -0,0 +1,144 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.0.31903.59
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{827E0CD3-B72D-47B6-A68D-7590B98EB39B}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Purrse.Core", "src\Purrse.Core\Purrse.Core.csproj", "{A417D901-AA67-4B72-93D0-93D99F246AED}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Purrse.Data", "src\Purrse.Data\Purrse.Data.csproj", "{B9FD024E-D5E9-4B61-A007-6478DBF82DD7}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Purrse.Api", "src\Purrse.Api\Purrse.Api.csproj", "{1C11BED2-5D3E-45F2-A6E7-D48131AE8A84}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Purrse.Plugins.Abstractions", "src\Purrse.Plugins.Abstractions\Purrse.Plugins.Abstractions.csproj", "{A9444014-87F9-4FDB-8326-0C77049A14A1}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Purrse.Plugins.OFX", "src\Purrse.Plugins.OFX\Purrse.Plugins.OFX.csproj", "{A252FD29-DCB8-43F9-B25B-ABD57CFE1BBE}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Purrse.Plugins.CSV", "src\Purrse.Plugins.CSV\Purrse.Plugins.CSV.csproj", "{C93480E6-AEF4-4665-9F8C-032F36DC6AD3}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Purrse.Plugins.QIF", "src\Purrse.Plugins.QIF\Purrse.Plugins.QIF.csproj", "{3CA0D3FF-F269-42D8-A8D4-AB77A34CBF0B}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Purrse.Tests", "src\Purrse.Tests\Purrse.Tests.csproj", "{8A090385-C08B-4BCB-A1C9-61C2D23E9C49}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{A417D901-AA67-4B72-93D0-93D99F246AED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{A417D901-AA67-4B72-93D0-93D99F246AED}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{A417D901-AA67-4B72-93D0-93D99F246AED}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{A417D901-AA67-4B72-93D0-93D99F246AED}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{A417D901-AA67-4B72-93D0-93D99F246AED}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{A417D901-AA67-4B72-93D0-93D99F246AED}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{A417D901-AA67-4B72-93D0-93D99F246AED}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{A417D901-AA67-4B72-93D0-93D99F246AED}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{A417D901-AA67-4B72-93D0-93D99F246AED}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{A417D901-AA67-4B72-93D0-93D99F246AED}.Release|x64.Build.0 = Release|Any CPU
|
||||
{A417D901-AA67-4B72-93D0-93D99F246AED}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{A417D901-AA67-4B72-93D0-93D99F246AED}.Release|x86.Build.0 = Release|Any CPU
|
||||
{B9FD024E-D5E9-4B61-A007-6478DBF82DD7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B9FD024E-D5E9-4B61-A007-6478DBF82DD7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B9FD024E-D5E9-4B61-A007-6478DBF82DD7}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{B9FD024E-D5E9-4B61-A007-6478DBF82DD7}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{B9FD024E-D5E9-4B61-A007-6478DBF82DD7}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{B9FD024E-D5E9-4B61-A007-6478DBF82DD7}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{B9FD024E-D5E9-4B61-A007-6478DBF82DD7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B9FD024E-D5E9-4B61-A007-6478DBF82DD7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B9FD024E-D5E9-4B61-A007-6478DBF82DD7}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{B9FD024E-D5E9-4B61-A007-6478DBF82DD7}.Release|x64.Build.0 = Release|Any CPU
|
||||
{B9FD024E-D5E9-4B61-A007-6478DBF82DD7}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{B9FD024E-D5E9-4B61-A007-6478DBF82DD7}.Release|x86.Build.0 = Release|Any CPU
|
||||
{1C11BED2-5D3E-45F2-A6E7-D48131AE8A84}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1C11BED2-5D3E-45F2-A6E7-D48131AE8A84}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1C11BED2-5D3E-45F2-A6E7-D48131AE8A84}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{1C11BED2-5D3E-45F2-A6E7-D48131AE8A84}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{1C11BED2-5D3E-45F2-A6E7-D48131AE8A84}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{1C11BED2-5D3E-45F2-A6E7-D48131AE8A84}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{1C11BED2-5D3E-45F2-A6E7-D48131AE8A84}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1C11BED2-5D3E-45F2-A6E7-D48131AE8A84}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1C11BED2-5D3E-45F2-A6E7-D48131AE8A84}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{1C11BED2-5D3E-45F2-A6E7-D48131AE8A84}.Release|x64.Build.0 = Release|Any CPU
|
||||
{1C11BED2-5D3E-45F2-A6E7-D48131AE8A84}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{1C11BED2-5D3E-45F2-A6E7-D48131AE8A84}.Release|x86.Build.0 = Release|Any CPU
|
||||
{A9444014-87F9-4FDB-8326-0C77049A14A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{A9444014-87F9-4FDB-8326-0C77049A14A1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{A9444014-87F9-4FDB-8326-0C77049A14A1}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{A9444014-87F9-4FDB-8326-0C77049A14A1}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{A9444014-87F9-4FDB-8326-0C77049A14A1}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{A9444014-87F9-4FDB-8326-0C77049A14A1}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{A9444014-87F9-4FDB-8326-0C77049A14A1}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{A9444014-87F9-4FDB-8326-0C77049A14A1}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{A9444014-87F9-4FDB-8326-0C77049A14A1}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{A9444014-87F9-4FDB-8326-0C77049A14A1}.Release|x64.Build.0 = Release|Any CPU
|
||||
{A9444014-87F9-4FDB-8326-0C77049A14A1}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{A9444014-87F9-4FDB-8326-0C77049A14A1}.Release|x86.Build.0 = Release|Any CPU
|
||||
{A252FD29-DCB8-43F9-B25B-ABD57CFE1BBE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{A252FD29-DCB8-43F9-B25B-ABD57CFE1BBE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{A252FD29-DCB8-43F9-B25B-ABD57CFE1BBE}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{A252FD29-DCB8-43F9-B25B-ABD57CFE1BBE}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{A252FD29-DCB8-43F9-B25B-ABD57CFE1BBE}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{A252FD29-DCB8-43F9-B25B-ABD57CFE1BBE}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{A252FD29-DCB8-43F9-B25B-ABD57CFE1BBE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{A252FD29-DCB8-43F9-B25B-ABD57CFE1BBE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{A252FD29-DCB8-43F9-B25B-ABD57CFE1BBE}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{A252FD29-DCB8-43F9-B25B-ABD57CFE1BBE}.Release|x64.Build.0 = Release|Any CPU
|
||||
{A252FD29-DCB8-43F9-B25B-ABD57CFE1BBE}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{A252FD29-DCB8-43F9-B25B-ABD57CFE1BBE}.Release|x86.Build.0 = Release|Any CPU
|
||||
{C93480E6-AEF4-4665-9F8C-032F36DC6AD3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C93480E6-AEF4-4665-9F8C-032F36DC6AD3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C93480E6-AEF4-4665-9F8C-032F36DC6AD3}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{C93480E6-AEF4-4665-9F8C-032F36DC6AD3}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{C93480E6-AEF4-4665-9F8C-032F36DC6AD3}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{C93480E6-AEF4-4665-9F8C-032F36DC6AD3}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{C93480E6-AEF4-4665-9F8C-032F36DC6AD3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C93480E6-AEF4-4665-9F8C-032F36DC6AD3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C93480E6-AEF4-4665-9F8C-032F36DC6AD3}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{C93480E6-AEF4-4665-9F8C-032F36DC6AD3}.Release|x64.Build.0 = Release|Any CPU
|
||||
{C93480E6-AEF4-4665-9F8C-032F36DC6AD3}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{C93480E6-AEF4-4665-9F8C-032F36DC6AD3}.Release|x86.Build.0 = Release|Any CPU
|
||||
{3CA0D3FF-F269-42D8-A8D4-AB77A34CBF0B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3CA0D3FF-F269-42D8-A8D4-AB77A34CBF0B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3CA0D3FF-F269-42D8-A8D4-AB77A34CBF0B}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{3CA0D3FF-F269-42D8-A8D4-AB77A34CBF0B}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{3CA0D3FF-F269-42D8-A8D4-AB77A34CBF0B}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{3CA0D3FF-F269-42D8-A8D4-AB77A34CBF0B}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{3CA0D3FF-F269-42D8-A8D4-AB77A34CBF0B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3CA0D3FF-F269-42D8-A8D4-AB77A34CBF0B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3CA0D3FF-F269-42D8-A8D4-AB77A34CBF0B}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{3CA0D3FF-F269-42D8-A8D4-AB77A34CBF0B}.Release|x64.Build.0 = Release|Any CPU
|
||||
{3CA0D3FF-F269-42D8-A8D4-AB77A34CBF0B}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{3CA0D3FF-F269-42D8-A8D4-AB77A34CBF0B}.Release|x86.Build.0 = Release|Any CPU
|
||||
{8A090385-C08B-4BCB-A1C9-61C2D23E9C49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8A090385-C08B-4BCB-A1C9-61C2D23E9C49}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8A090385-C08B-4BCB-A1C9-61C2D23E9C49}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{8A090385-C08B-4BCB-A1C9-61C2D23E9C49}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{8A090385-C08B-4BCB-A1C9-61C2D23E9C49}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{8A090385-C08B-4BCB-A1C9-61C2D23E9C49}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{8A090385-C08B-4BCB-A1C9-61C2D23E9C49}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{8A090385-C08B-4BCB-A1C9-61C2D23E9C49}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{8A090385-C08B-4BCB-A1C9-61C2D23E9C49}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{8A090385-C08B-4BCB-A1C9-61C2D23E9C49}.Release|x64.Build.0 = Release|Any CPU
|
||||
{8A090385-C08B-4BCB-A1C9-61C2D23E9C49}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{8A090385-C08B-4BCB-A1C9-61C2D23E9C49}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{A417D901-AA67-4B72-93D0-93D99F246AED} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
|
||||
{B9FD024E-D5E9-4B61-A007-6478DBF82DD7} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
|
||||
{1C11BED2-5D3E-45F2-A6E7-D48131AE8A84} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
|
||||
{A9444014-87F9-4FDB-8326-0C77049A14A1} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
|
||||
{A252FD29-DCB8-43F9-B25B-ABD57CFE1BBE} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
|
||||
{C93480E6-AEF4-4665-9F8C-032F36DC6AD3} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
|
||||
{3CA0D3FF-F269-42D8-A8D4-AB77A34CBF0B} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
|
||||
{8A090385-C08B-4BCB-A1C9-61C2D23E9C49} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
Reference in New Issue
Block a user