Skip to content

Commit aa5cc48

Browse files
committed
Merge branch 'pre-release' into 'master'
Merge changes for version 1.3 See merge request Axelander/openbudgeteer!10
2 parents 031f813 + 9044f3f commit aa5cc48

File tree

74 files changed

+3940
-631
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

74 files changed

+3940
-631
lines changed

.gitignore

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
##
44
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
55

6+
## Custom files
7+
*.db
8+
*.DS_Store
9+
610
# User-specific files
711
*.rsuser
812
*.suo
@@ -337,4 +341,4 @@ ASALocalRun/
337341
.localhistory/
338342

339343
# BeatPulse healthcheck temp database
340-
healthchecksdb
344+
healthchecksdb

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
### 1.3 (2020-12-15)
2+
3+
* [Add] Support for Sqlite databases #2
4+
* [Add] Unit Tests (not full coverage yet)
5+
16
### 1.2.1 (2020-12-14)
27

38
* [Fixed] Crash on Report Page due to wrong DateTime creation

OpenBudgeteer.Blazor/Dockerfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ EXPOSE 443
88
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
99
WORKDIR /src
1010
COPY ["OpenBudgeteer.Blazor/OpenBudgeteer.Blazor.csproj", "OpenBudgeteer.Blazor/"]
11+
COPY ["OpenBudgeteer.Core/OpenBudgeteer.Core.csproj", "OpenBudgeteer.Core/"]
1112
RUN dotnet restore "OpenBudgeteer.Blazor/OpenBudgeteer.Blazor.csproj"
1213
COPY . .
1314
WORKDIR "/src/OpenBudgeteer.Blazor"
@@ -19,4 +20,5 @@ RUN dotnet publish "OpenBudgeteer.Blazor.csproj" -c Release -o /app/publish
1920
FROM base AS final
2021
WORKDIR /app
2122
COPY --from=publish /app/publish .
23+
RUN mkdir database
2224
ENTRYPOINT ["dotnet", "OpenBudgeteer.dll"]

OpenBudgeteer.Blazor/OpenBudgeteer.Blazor.csproj

Lines changed: 6 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -7,38 +7,21 @@
77
<AssemblyName>OpenBudgeteer</AssemblyName>
88
</PropertyGroup>
99

10-
<ItemGroup>
11-
<Compile Remove="Migrations\20200608152200_DecimalPrecision.cs" />
12-
<Compile Remove="Migrations\20200608152200_DecimalPrecision.Designer.cs" />
13-
<Compile Remove="Migrations\20200612082043_FixedBucketVersion.cs" />
14-
<Compile Remove="Migrations\20200612082043_FixedBucketVersion.Designer.cs" />
15-
<Compile Remove="Migrations\20200701131446_TransactionDateTime.cs" />
16-
<Compile Remove="Migrations\20200701131446_TransactionDateTime.Designer.cs" />
17-
<Compile Remove="Migrations\20200707141411_ImportProfileDateNumberFormat.cs" />
18-
<Compile Remove="Migrations\20200707141411_ImportProfileDateNumberFormat.Designer.cs" />
19-
<Compile Remove="Migrations\20200814120506_AutomaticBucketAssignment.cs" />
20-
<Compile Remove="Migrations\20200814120506_AutomaticBucketAssignment.Designer.cs" />
21-
<Compile Remove="Migrations\20200818091835_foobar.cs" />
22-
<Compile Remove="Migrations\20200818091835_foobar.Designer.cs" />
23-
<Compile Remove="Migrations\20200818091949_AutomaticBucketAssignment.cs" />
24-
<Compile Remove="Migrations\20200818091949_AutomaticBucketAssignment.Designer.cs" />
25-
<Compile Remove="Migrations\20200818093918_AutomaticBucketAssignment.cs" />
26-
<Compile Remove="Migrations\20200818093918_AutomaticBucketAssignment.Designer.cs" />
27-
</ItemGroup>
28-
2910
<ItemGroup>
3011
<PackageReference Include="ChartJs.Blazor" Version="1.1.0" />
12+
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.8" />
3113
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.8">
3214
<PrivateAssets>all</PrivateAssets>
3315
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
3416
</PackageReference>
35-
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.10.9" />
3617
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.8" />
37-
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="3.1.2" />
18+
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.10.9" />
19+
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="3.2.1" />
3820
<PackageReference Include="Tewr.Blazor.FileReader" Version="2.0.0.20242" />
39-
<PackageReference Include="TinyCsvParser" Version="2.5.2" />
4021
</ItemGroup>
4122

42-
<Import Project="..\OpenBudgeteer.Core\OpenBudgeteer.Core.projitems" Label="Shared" />
23+
<ItemGroup>
24+
<ProjectReference Include="..\OpenBudgeteer.Core\OpenBudgeteer.Core.csproj" />
25+
</ItemGroup>
4326

4427
</Project>

OpenBudgeteer.Blazor/Pages/Account.razor

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
@page "/account"
22

33
@using OpenBudgeteer.Core.ViewModels
4-
@using OpenBudgeteer.Core.Common
4+
@using OpenBudgeteer.Core.Common.Database
55
@using Microsoft.EntityFrameworkCore
66
@using OpenBudgeteer.Core.ViewModels.ItemViewModels
77
@using System.Globalization
8+
@using OpenBudgeteer.Core.Common
89
@inject DbContextOptions<DatabaseContext> DbContextOptions
910

1011
<div class="row">
@@ -74,7 +75,7 @@
7475
_dataContext.LoadData();
7576
StateHasChanged();
7677
};
77-
HandleResult(new Tuple<bool, string>(true, ""));
78+
HandleResult(new ViewModelOperationResult(true));
7879
}
7980

8081
private void CreateNewAccount()
@@ -109,12 +110,11 @@
109110
HandleResult(account.CloseAccount());
110111
}
111112

112-
void HandleResult(Tuple<bool, string> result)
113+
void HandleResult(ViewModelOperationResult result)
113114
{
114-
var (success, errorMessage) = result;
115-
if (!success)
115+
if (!result.IsSuccessful)
116116
{
117-
_errorModalDialogMessage = errorMessage;
117+
_errorModalDialogMessage = result.Message;
118118
_isErrorModalDialogVisible = true;
119119
}
120120
}

OpenBudgeteer.Blazor/Pages/Bucket.razor

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
@page "/bucket"
2-
@using OpenBudgeteer.Core.Common
2+
@using OpenBudgeteer.Core.Common.Database
33
@using OpenBudgeteer.Core.ViewModels
44
@using OpenBudgeteer.Core.ViewModels.ItemViewModels
55
@using Microsoft.EntityFrameworkCore
66
@using System.Drawing
77
@using System.Globalization
8+
@using OpenBudgeteer.Core.Common
89
@inject DbContextOptions<DatabaseContext> DbContextOptions
910
@inject YearMonthSelectorViewModel YearMonthDataContext
1011

@@ -397,20 +398,19 @@
397398
StateHasChanged();
398399
}
399400

400-
void HandleResult(Tuple<bool, string> result)
401+
void HandleResult(ViewModelOperationResult result)
401402
{
402-
var (success, errorMessage) = result;
403-
if (!success)
403+
if (!result.IsSuccessful)
404404
{
405-
_errorModalDialogMessage = errorMessage;
405+
_errorModalDialogMessage = result.Message;
406406
_isErrorModalDialogVisible = true;
407407
}
408408
}
409409

410410
void InOut_Changed(BucketViewModelItem bucket, KeyboardEventArgs args)
411411
{
412412
var result = bucket.HandleInOutInput(args.Key);
413-
if (result.Item1)
413+
if (result.IsSuccessful)
414414
{
415415
HandleResult(_dataContext.UpdateBalanceFigures());
416416
StateHasChanged();

OpenBudgeteer.Blazor/Pages/Import.razor

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
@page "/import"
22

33
@using OpenBudgeteer.Core.ViewModels
4-
@using OpenBudgeteer.Core.Common
4+
@using OpenBudgeteer.Core.Common.Database
55
@using Microsoft.EntityFrameworkCore
66
@using System.IO
77
@using System.Text
8+
@using OpenBudgeteer.Core.Common
89
@using OpenBudgeteer.Core.Models
910
@using Tewr.Blazor.FileReader
1011
@inject DbContextOptions<DatabaseContext> DbContextOptions
@@ -362,7 +363,7 @@
362363
_dataContext.SelectedImportProfile = _dataContext.AvailableImportProfiles.First();
363364
}
364365
var result = _dataContext.LoadProfile();
365-
if (result.Item1)
366+
if (result.IsSuccessful)
366367
{
367368
_step3Enabled = _dataContext.SelectedImportProfile.ImportProfileId != 0;
368369
CheckColumnMapping();
@@ -377,7 +378,7 @@
377378
void LoadHeaders()
378379
{
379380
var result = _dataContext.LoadHeaders();
380-
if (result.Item1)
381+
if (result.IsSuccessful)
381382
{
382383
_step3Enabled = true;
383384
}
@@ -404,13 +405,13 @@
404405

405406
void ValidateData()
406407
{
407-
_validationErrorMessage = _dataContext.ValidateData();
408+
_validationErrorMessage = _dataContext.ValidateData().Message;
408409
}
409410

410411
void ImportData()
411412
{
412413
var result = _dataContext.ImportData();
413-
_importConfirmationMessage = result.Item2;
414+
_importConfirmationMessage = result.Message;
414415
_isConfirmationModalDialogVisible = true;
415416
}
416417

@@ -457,12 +458,11 @@
457458
CheckColumnMapping();
458459
}
459460

460-
void HandleResult(Tuple<bool, string> result)
461+
void HandleResult(ViewModelOperationResult result)
461462
{
462-
var (success, errorMessage) = result;
463-
if (!success)
463+
if (!result.IsSuccessful)
464464
{
465-
_errorModalDialogMessage = errorMessage;
465+
_errorModalDialogMessage = result.Message;
466466
_isErrorModalDialogVisible = true;
467467
}
468468
}

OpenBudgeteer.Blazor/Pages/Report.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
@using ChartJs.Blazor.ChartJS.Common.Properties
1010
@using ChartJs.Blazor.Util
1111
@using Microsoft.EntityFrameworkCore
12-
@using OpenBudgeteer.Core.Common
12+
@using OpenBudgeteer.Core.Common.Database
1313
@using OpenBudgeteer.Blazor.ViewModels
1414
@inject DbContextOptions<DatabaseContext> DbContextOptions
1515

OpenBudgeteer.Blazor/Pages/Rules.razor

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
@page "/rules"
22

33
@using Microsoft.EntityFrameworkCore
4-
@using OpenBudgeteer.Core.Common
4+
@using OpenBudgeteer.Core.Common.Database
55
@using OpenBudgeteer.Core.ViewModels
66
@using OpenBudgeteer.Core.ViewModels.ItemViewModels
77
@using System.Drawing
8+
@using OpenBudgeteer.Core.Common
89
@using OpenBudgeteer.Core.Models
910
@inject DbContextOptions<DatabaseContext> DbContextOptions
1011

@@ -305,12 +306,11 @@
305306
HandleResult(_dataContext.DeleteRuleSetItem(_ruleSetToBeDeleted));
306307
}
307308

308-
void HandleResult(Tuple<bool, string> result)
309+
void HandleResult(ViewModelOperationResult result)
309310
{
310-
var (success, errorMessage) = result;
311-
if (!success)
311+
if (!result.IsSuccessful)
312312
{
313-
_errorModalDialogMessage = errorMessage;
313+
_errorModalDialogMessage = result.Message;
314314
_isErrorModalDialogVisible = true;
315315
}
316316
}

OpenBudgeteer.Blazor/Pages/Transaction.razor

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
@page "/transaction"
22

33
@using OpenBudgeteer.Core.ViewModels
4-
@using OpenBudgeteer.Core.Common
4+
@using OpenBudgeteer.Core.Common.Database
55
@using Microsoft.EntityFrameworkCore
66
@using System.Drawing
7+
@using OpenBudgeteer.Core.Common
78
@using OpenBudgeteer.Core.ViewModels.ItemViewModels
89
@inject DbContextOptions<DatabaseContext> DbContextOptions
910
@inject YearMonthSelectorViewModel YearMonthDataContext
@@ -292,12 +293,11 @@
292293
HandleResult(_transactionToBeDeleted.DeleteItem());
293294
}
294295

295-
void HandleResult(Tuple<bool, string> result)
296+
void HandleResult(ViewModelOperationResult result)
296297
{
297-
var (success, errorMessage) = result;
298-
if (!success)
298+
if (!result.IsSuccessful)
299299
{
300-
_errorModalDialogMessage = errorMessage;
300+
_errorModalDialogMessage = result.Message;
301301
_isErrorModalDialogVisible = true;
302302
}
303303
}

OpenBudgeteer.Blazor/Shared/NavMenu.razor

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
@using OpenBudgeteer.Core.Common
1+
@using OpenBudgeteer.Core.Common.Database
22
@using Microsoft.EntityFrameworkCore
33
@inject DbContextOptions<DatabaseContext> DbContextOptions
44

@@ -54,7 +54,7 @@
5454
</div>
5555
<div class="navbar-text">
5656
<span>
57-
Version: 1.2 (<a href="https://gitlab.com/Axelander/openbudgeteer/-/blob/master/CHANGELOG.md" target="_blank">Change Log</a>)
57+
Version: 1.3 (<a href="https://gitlab.com/Axelander/openbudgeteer/-/blob/master/CHANGELOG.md" target="_blank">Change Log</a>)
5858
</span>
5959
</div>
6060
</div>

OpenBudgeteer.Blazor/Startup.cs

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
using Microsoft.Extensions.Configuration;
1313
using Microsoft.Extensions.DependencyInjection;
1414
using Microsoft.Extensions.Hosting;
15-
using OpenBudgeteer.Core.Common;
15+
using OpenBudgeteer.Core.Common.Database;
1616
using OpenBudgeteer.Core.ViewModels;
1717
using Tewr.Blazor.FileReader;
1818

@@ -36,20 +36,52 @@ public void ConfigureServices(IServiceCollection services)
3636
services.AddFileReaderService();
3737
services.AddScoped<YearMonthSelectorViewModel>();
3838
var configurationSection = Configuration.GetSection("Connection");
39-
var connectionString = $"Server={configurationSection?["Server"]};" +
39+
var provider = configurationSection?["Provider"];
40+
string connectionString;
41+
switch (provider)
42+
{
43+
case "mysql":
44+
connectionString = $"Server={configurationSection?["Server"]};" +
4045
$"Port={configurationSection?["Port"]};" +
4146
$"Database={configurationSection?["Database"]};" +
4247
$"User={configurationSection?["User"]};" +
4348
$"Password={configurationSection?["Password"]}";
44-
services.AddDbContext<DatabaseContext>(options => options.UseMySql(
45-
connectionString,
46-
b => b.MigrationsAssembly("OpenBudgeteer")),
47-
ServiceLifetime.Transient);
49+
50+
services.AddDbContext<DatabaseContext>(options => options.UseMySql(
51+
connectionString,
52+
b => b.MigrationsAssembly("OpenBudgeteer.Core")),
53+
ServiceLifetime.Transient);
54+
55+
// Check on Pending Db Migrations
56+
var mySqlDbContext = new MySqlDatabaseContextFactory().CreateDbContext(Configuration);
57+
if (mySqlDbContext.Database.GetPendingMigrations().Any()) mySqlDbContext.Database.Migrate();
58+
59+
break;
60+
case "sqlite":
61+
#if DEBUG
62+
connectionString = "Data Source=openbudgeteer.db";
63+
#else
64+
connectionString = "Data Source=database/openbudgeteer.db";
65+
#endif
66+
services.AddDbContext<DatabaseContext>(options => options.UseSqlite(
67+
connectionString,
68+
b => b.MigrationsAssembly("OpenBudgeteer.Core")),
69+
ServiceLifetime.Transient);
70+
71+
// Check on Pending Db Migrations
72+
var sqliteDbContext = new SqliteDatabaseContextFactory().CreateDbContext(connectionString);
73+
if (sqliteDbContext.Database.GetPendingMigrations().Any()) sqliteDbContext.Database.Migrate();
74+
75+
break;
76+
default:
77+
throw new ArgumentOutOfRangeException($"Database provider {provider} not supported");
78+
}
79+
4880
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); // Required to read ANSI Text files
4981
}
5082

5183
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
52-
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, DatabaseContext dbContext)
84+
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
5385
{
5486
if (env.IsDevelopment())
5587
{
@@ -73,7 +105,6 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env, Database
73105
endpoints.MapFallbackToPage("/_Host");
74106
});
75107

76-
if (dbContext.Database.GetPendingMigrations().Any()) dbContext.Database.Migrate();
77108
// TODO Get Culture from Settings
78109
var cultureInfo = new CultureInfo("de-DE");
79110
CultureInfo.DefaultThreadCurrentCulture = cultureInfo;

OpenBudgeteer.Blazor/ViewModels/BlazorReportViewModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
using ChartJs.Blazor.ChartJS.LineChart;
1515
using ChartJs.Blazor.Util;
1616
using Microsoft.EntityFrameworkCore;
17-
using OpenBudgeteer.Core.Common;
17+
using OpenBudgeteer.Core.Common.Database;
1818
using OpenBudgeteer.Core.ViewModels;
1919

2020
namespace OpenBudgeteer.Blazor.ViewModels

0 commit comments

Comments
 (0)