From 30850d7b9dd723a64730dc300a3e5d6294b374fa Mon Sep 17 00:00:00 2001 From: Stuart Ferguson Date: Fri, 4 Feb 2022 21:41:00 +0000 Subject: [PATCH] Create business logic project --- .../RequestHandlers/LoginRequestHandler.cs | 36 +++++++++++++ .../Requests/LoginRequest.cs | 15 ++++++ .../Services/DummyAuthenticationService.cs | 15 ++++++ .../Services/IAuthenticationService.cs | 13 +++++ ...ransactionMobile.Maui.BusinessLogic.csproj | 14 +++++ TransactionMobile.Maui.sln | 9 +++- ...{Class1.cs => MauiAppBuilderExtensions.cs} | 40 +++++++-------- .../Models/Shared/AppSection.cs | 17 ------- .../RequestHandlers/LoginRequestHandler.cs | 28 ---------- .../Requests/LoginRequest.cs | 16 ------ .../Services/IAuthenticationService.cs | 21 -------- .../TransactionMobile.Maui.csproj | 8 +++ .../ViewModels/LoginViewModel.cs | 51 ++++++++++--------- 13 files changed, 155 insertions(+), 128 deletions(-) create mode 100644 TransactionMobile.Maui.BusinessLogic/RequestHandlers/LoginRequestHandler.cs create mode 100644 TransactionMobile.Maui.BusinessLogic/Requests/LoginRequest.cs create mode 100644 TransactionMobile.Maui.BusinessLogic/Services/DummyAuthenticationService.cs create mode 100644 TransactionMobile.Maui.BusinessLogic/Services/IAuthenticationService.cs create mode 100644 TransactionMobile.Maui.BusinessLogic/TransactionMobile.Maui.BusinessLogic.csproj rename TransactionMobile.Maui/Extensions/{Class1.cs => MauiAppBuilderExtensions.cs} (69%) delete mode 100644 TransactionMobile.Maui/Models/Shared/AppSection.cs delete mode 100644 TransactionMobile.Maui/RequestHandlers/LoginRequestHandler.cs delete mode 100644 TransactionMobile.Maui/Requests/LoginRequest.cs delete mode 100644 TransactionMobile.Maui/Services/IAuthenticationService.cs diff --git a/TransactionMobile.Maui.BusinessLogic/RequestHandlers/LoginRequestHandler.cs b/TransactionMobile.Maui.BusinessLogic/RequestHandlers/LoginRequestHandler.cs new file mode 100644 index 00000000..49510bb2 --- /dev/null +++ b/TransactionMobile.Maui.BusinessLogic/RequestHandlers/LoginRequestHandler.cs @@ -0,0 +1,36 @@ +namespace TransactionMobile.Maui.BusinessLogic.RequestHandlers +{ + using MediatR; + using Requests; + using Services; + + public class LoginRequestHandler : IRequestHandler + { + #region Constructors + + public LoginRequestHandler(IAuthenticationService authenticationService) + { + this.AuthenticationService = authenticationService; + } + + #endregion + + #region Properties + + public IAuthenticationService AuthenticationService { get; } + + #endregion + + #region Methods + + public async Task Handle(LoginRequest request, + CancellationToken cancellationToken) + { + var token = await this.AuthenticationService.GetToken(request.UserName, request.Password, cancellationToken); + + return token; + } + + #endregion + } +} \ No newline at end of file diff --git a/TransactionMobile.Maui.BusinessLogic/Requests/LoginRequest.cs b/TransactionMobile.Maui.BusinessLogic/Requests/LoginRequest.cs new file mode 100644 index 00000000..9eea359d --- /dev/null +++ b/TransactionMobile.Maui.BusinessLogic/Requests/LoginRequest.cs @@ -0,0 +1,15 @@ +namespace TransactionMobile.Maui.BusinessLogic.Requests +{ + using MediatR; + + public class LoginRequest : IRequest + { + #region Properties + + public String Password { get; set; } + + public String UserName { get; set; } + + #endregion + } +} \ No newline at end of file diff --git a/TransactionMobile.Maui.BusinessLogic/Services/DummyAuthenticationService.cs b/TransactionMobile.Maui.BusinessLogic/Services/DummyAuthenticationService.cs new file mode 100644 index 00000000..48ef82e2 --- /dev/null +++ b/TransactionMobile.Maui.BusinessLogic/Services/DummyAuthenticationService.cs @@ -0,0 +1,15 @@ +namespace TransactionMobile.Maui.BusinessLogic.Services; + +public class DummyAuthenticationService : IAuthenticationService +{ + #region Methods + + public async Task GetToken(String username, + String password, + CancellationToken cancellationToken) + { + return "MyToken"; + } + + #endregion +} \ No newline at end of file diff --git a/TransactionMobile.Maui.BusinessLogic/Services/IAuthenticationService.cs b/TransactionMobile.Maui.BusinessLogic/Services/IAuthenticationService.cs new file mode 100644 index 00000000..9617d4ff --- /dev/null +++ b/TransactionMobile.Maui.BusinessLogic/Services/IAuthenticationService.cs @@ -0,0 +1,13 @@ +namespace TransactionMobile.Maui.BusinessLogic.Services +{ + public interface IAuthenticationService + { + #region Methods + + Task GetToken(String username, + String password, + CancellationToken cancellationToken); + + #endregion + } +} \ No newline at end of file diff --git a/TransactionMobile.Maui.BusinessLogic/TransactionMobile.Maui.BusinessLogic.csproj b/TransactionMobile.Maui.BusinessLogic/TransactionMobile.Maui.BusinessLogic.csproj new file mode 100644 index 00000000..8563d4e0 --- /dev/null +++ b/TransactionMobile.Maui.BusinessLogic/TransactionMobile.Maui.BusinessLogic.csproj @@ -0,0 +1,14 @@ + + + + net6.0 + enable + enable + + + + + + + + diff --git a/TransactionMobile.Maui.sln b/TransactionMobile.Maui.sln index ea86972a..58c9dfec 100644 --- a/TransactionMobile.Maui.sln +++ b/TransactionMobile.Maui.sln @@ -9,7 +9,9 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{1CBEF4C1-7D9 EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{AB312EE3-CBA4-469A-8694-67C5466298C5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TransactionMobile.Maui.Tests", "TransactionMobile.Maui.Tests\TransactionMobile.Maui.Tests.csproj", "{BD64046D-7103-44E6-8453-46C895A2AB93}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TransactionMobile.Maui.Tests", "TransactionMobile.Maui.Tests\TransactionMobile.Maui.Tests.csproj", "{BD64046D-7103-44E6-8453-46C895A2AB93}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TransactionMobile.Maui.BusinessLogic", "TransactionMobile.Maui.BusinessLogic\TransactionMobile.Maui.BusinessLogic.csproj", "{CC820A65-AC8B-4E42-8BB1-21F5EB348995}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -27,6 +29,10 @@ Global {BD64046D-7103-44E6-8453-46C895A2AB93}.Debug|Any CPU.Build.0 = Debug|Any CPU {BD64046D-7103-44E6-8453-46C895A2AB93}.Release|Any CPU.ActiveCfg = Release|Any CPU {BD64046D-7103-44E6-8453-46C895A2AB93}.Release|Any CPU.Build.0 = Release|Any CPU + {CC820A65-AC8B-4E42-8BB1-21F5EB348995}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CC820A65-AC8B-4E42-8BB1-21F5EB348995}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CC820A65-AC8B-4E42-8BB1-21F5EB348995}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CC820A65-AC8B-4E42-8BB1-21F5EB348995}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -34,6 +40,7 @@ Global GlobalSection(NestedProjects) = preSolution {73668181-7A26-435D-83E3-CF141AC8FD0B} = {1CBEF4C1-7D90-4A78-AA55-D81F1447A70E} {BD64046D-7103-44E6-8453-46C895A2AB93} = {AB312EE3-CBA4-469A-8694-67C5466298C5} + {CC820A65-AC8B-4E42-8BB1-21F5EB348995} = {1CBEF4C1-7D90-4A78-AA55-D81F1447A70E} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {61F7FB11-1E47-470C-91E2-47F8143E1572} diff --git a/TransactionMobile.Maui/Extensions/Class1.cs b/TransactionMobile.Maui/Extensions/MauiAppBuilderExtensions.cs similarity index 69% rename from TransactionMobile.Maui/Extensions/Class1.cs rename to TransactionMobile.Maui/Extensions/MauiAppBuilderExtensions.cs index 9a109ee8..d3d70934 100644 --- a/TransactionMobile.Maui/Extensions/Class1.cs +++ b/TransactionMobile.Maui/Extensions/MauiAppBuilderExtensions.cs @@ -1,22 +1,19 @@ -using MediatR; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Threading.Tasks; -using TransactionMobile.Maui.RequestHandlers; -using TransactionMobile.Maui.Requests; -using TransactionMobile.Maui.Services; -using TransactionMobile.Maui.ViewModels; - -namespace TransactionMobile.Maui.Extensions +namespace TransactionMobile.Maui.Extensions { + using BusinessLogic.RequestHandlers; + using BusinessLogic.Requests; + using BusinessLogic.Services; + using MediatR; + using ViewModels; + public static class MauiAppBuilderExtensions { - public static MauiAppBuilder ConfigureViewModels(this MauiAppBuilder builder) + #region Methods + + public static MauiAppBuilder ConfigureAppServices(this MauiAppBuilder builder) { - builder.Services.AddTransient(); + builder.Services.AddSingleton(); + return builder; } @@ -27,15 +24,14 @@ public static MauiAppBuilder ConfigureRequestHandlers(this MauiAppBuilder builde builder.Services.AddSingleton(ctx => { return t => ctx.GetService(t); }); return builder; - } + } - public static MauiAppBuilder ConfigureAppServices(this MauiAppBuilder builder) + public static MauiAppBuilder ConfigureViewModels(this MauiAppBuilder builder) { - builder.Services.AddSingleton(); - + builder.Services.AddTransient(); return builder; } - } - -} + #endregion + } +} \ No newline at end of file diff --git a/TransactionMobile.Maui/Models/Shared/AppSection.cs b/TransactionMobile.Maui/Models/Shared/AppSection.cs deleted file mode 100644 index fbc99621..00000000 --- a/TransactionMobile.Maui/Models/Shared/AppSection.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace TransactionMobile.Maui.Models.Shell -{ - public class AppSection - { - public string Title { get; set; } - public string Icon { get; set; } - public string IconDark { get; set; } - public Type TargetType { get; set; } - - } -} diff --git a/TransactionMobile.Maui/RequestHandlers/LoginRequestHandler.cs b/TransactionMobile.Maui/RequestHandlers/LoginRequestHandler.cs deleted file mode 100644 index d424d875..00000000 --- a/TransactionMobile.Maui/RequestHandlers/LoginRequestHandler.cs +++ /dev/null @@ -1,28 +0,0 @@ -using MediatR; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using TransactionMobile.Maui.Requests; -using TransactionMobile.Maui.Services; - -namespace TransactionMobile.Maui.RequestHandlers -{ - public class LoginRequestHandler : IRequestHandler - { - public LoginRequestHandler(IAuthenticationService authenticationService) - { - AuthenticationService = authenticationService; - } - - public IAuthenticationService AuthenticationService { get; } - - public async Task Handle(LoginRequest request, CancellationToken cancellationToken) - { - var token = await this.AuthenticationService.GetToken(request.UserName, request.Password, cancellationToken); - - return token; - } - } -} \ No newline at end of file diff --git a/TransactionMobile.Maui/Requests/LoginRequest.cs b/TransactionMobile.Maui/Requests/LoginRequest.cs deleted file mode 100644 index e7431500..00000000 --- a/TransactionMobile.Maui/Requests/LoginRequest.cs +++ /dev/null @@ -1,16 +0,0 @@ -using MediatR; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using TransactionMobile.Maui.Services; - -namespace TransactionMobile.Maui.Requests -{ - public class LoginRequest : IRequest - { - public String UserName { get; set; } - public String Password { get; set; } - } -} diff --git a/TransactionMobile.Maui/Services/IAuthenticationService.cs b/TransactionMobile.Maui/Services/IAuthenticationService.cs deleted file mode 100644 index 53edf128..00000000 --- a/TransactionMobile.Maui/Services/IAuthenticationService.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace TransactionMobile.Maui.Services -{ - public interface IAuthenticationService - { - Task GetToken(String username, String password, CancellationToken cancellationToken); - } - - public class DummyAuthenticationService : IAuthenticationService - { - public async Task GetToken(string username, string password, CancellationToken cancellationToken) - { - return "MyToken"; - } - } -} diff --git a/TransactionMobile.Maui/TransactionMobile.Maui.csproj b/TransactionMobile.Maui/TransactionMobile.Maui.csproj index 914175d0..83305ae1 100644 --- a/TransactionMobile.Maui/TransactionMobile.Maui.csproj +++ b/TransactionMobile.Maui/TransactionMobile.Maui.csproj @@ -56,6 +56,10 @@ + + + + @@ -88,6 +92,10 @@ + + + + WinExe win10-x64 diff --git a/TransactionMobile.Maui/ViewModels/LoginViewModel.cs b/TransactionMobile.Maui/ViewModels/LoginViewModel.cs index d044d430..84a6f744 100644 --- a/TransactionMobile.Maui/ViewModels/LoginViewModel.cs +++ b/TransactionMobile.Maui/ViewModels/LoginViewModel.cs @@ -1,43 +1,47 @@ -using MediatR; -using MvvmHelpers; -using MvvmHelpers.Commands; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Input; -using TransactionMobile.Maui.Requests; -using TransactionMobile.Maui.Services; - -namespace TransactionMobile.Maui.ViewModels +namespace TransactionMobile.Maui.ViewModels { + using System.Windows.Input; + using BusinessLogic.Requests; + using BusinessLogic.Services; + using MediatR; + using MvvmHelpers; + using MvvmHelpers.Commands; + public class LoginViewModel : BaseViewModel - { - public ICommand LoginCommand { get; set; } + { + #region Constructors + //public String Username { get; set; } //public String Password { get; set; } public LoginViewModel(IMediator mediator) { - - this.LoginCommand = new AsyncCommand(LoginCommandExecute); - Mediator = mediator; + this.LoginCommand = new AsyncCommand(this.LoginCommandExecute); + this.Mediator = mediator; } + #endregion + + #region Properties + public IAuthenticationService AuthenticationService { get; } + + public ICommand LoginCommand { get; set; } + public IMediator Mediator { get; } + #endregion + + #region Methods + internal async Task InitializeAsync() { - - } private async Task LoginCommandExecute() { LoginRequest request = new LoginRequest(); - var token = await this.Mediator.Send(request); + String token = await this.Mediator.Send(request); //if (token == null) //{ @@ -46,7 +50,8 @@ private async Task LoginCommandExecute() // TODO: Cache the token as will be needed later await Shell.Current.GoToAsync("//home"); - } + + #endregion } -} +} \ No newline at end of file