From ed770e8c3078165ccf6235fea1570951bea0ce7f Mon Sep 17 00:00:00 2001 From: Mikhail Shabanov Date: Mon, 18 May 2020 17:29:54 +0200 Subject: [PATCH] Encapsulated WG logic, added automapper, added realm and lang parameters --- .../Query/WotBlitzStatisticsQuery.cs | 29 +++++++--------- WotBlitzStatistics.GraphQl/Startup.cs | 8 +++-- .../WotBlitzStatistics.GraphQl.csproj | 2 +- WotBlitzStatistics.Logic/IWargamingSearch.cs | 14 ++++++++ .../Mappers/AccountSearchResponseProfile.cs | 17 ++++++++++ WotBlitzStatistics.Logic/WargamingSearch.cs | 34 +++++++++++++++++++ .../WotBlitzStatistics.Logic.csproj | 19 +++++++++++ .../WotBlitzStatisticsLogicInstaller.cs | 16 +++++++++ WotBlitzStatisticsPro.sln | 14 +++++--- .../WotBlitzStatististics.Logic.csproj | 7 ++++ 10 files changed, 136 insertions(+), 24 deletions(-) create mode 100644 WotBlitzStatistics.Logic/IWargamingSearch.cs create mode 100644 WotBlitzStatistics.Logic/Mappers/AccountSearchResponseProfile.cs create mode 100644 WotBlitzStatistics.Logic/WargamingSearch.cs create mode 100644 WotBlitzStatistics.Logic/WotBlitzStatistics.Logic.csproj create mode 100644 WotBlitzStatistics.Logic/WotBlitzStatisticsLogicInstaller.cs create mode 100644 WotBlitzStatististics.Logic/WotBlitzStatististics.Logic.csproj diff --git a/WotBlitzStatistics.GraphQl/Query/WotBlitzStatisticsQuery.cs b/WotBlitzStatistics.GraphQl/Query/WotBlitzStatisticsQuery.cs index 7a6107b..99d206e 100644 --- a/WotBlitzStatistics.GraphQl/Query/WotBlitzStatisticsQuery.cs +++ b/WotBlitzStatistics.GraphQl/Query/WotBlitzStatisticsQuery.cs @@ -1,35 +1,30 @@ -using System.Collections.Generic; -using System.Threading.Tasks; +using System.Threading.Tasks; +using WotBlitzStatistics.Logic; using WotBlitzStatisticsPro.Common.Model; -using WotBlitzStatisticsPro.WgApiClient; +using WotBlitzStatisticsPro.WgApiClient.Model; namespace WotBlitzStatistics.GraphQl.Query { public class WotBlitzStatisticsQuery { - private readonly IWargamingApiClient _wargamingApiClient; + private readonly IWargamingSearch _wargamingSearcher; - public WotBlitzStatisticsQuery(IWargamingApiClient wargamingApiClient) + public WotBlitzStatisticsQuery(IWargamingSearch wargamingSearcher) { - _wargamingApiClient = wargamingApiClient; + _wargamingSearcher = wargamingSearcher; } //public Task GetPlayerInfo(long accountId) //{ - // return _wargamingApiClient.GetPlayerAccountInfo(accountId); + // return _wargamingSearcher.GetPlayerAccountInfo(accountId); //} - public async Task FindAccounts(string accountNick) + public Task FindAccounts( + string accountNick, + RealmType? realmType, + RequestLanguage? language) { - var response = await _wargamingApiClient.FindAccounts(accountNick); - // ToDo: Use auto mapper - var result = new AccountsSearchResponse - { - AccountsCount = response.Count, - Accounts = new List() - }; - response.ForEach(r => result.Accounts.Add(new AccountsSearchResponseItem {AccountId = r.AccountId.Value, Nickname = r.Nickname})); - return result; + return _wargamingSearcher.FindAccounts(accountNick, realmType ?? RealmType.Ru, language ?? RequestLanguage.En); } } } diff --git a/WotBlitzStatistics.GraphQl/Startup.cs b/WotBlitzStatistics.GraphQl/Startup.cs index 2f98cee..eb5d480 100644 --- a/WotBlitzStatistics.GraphQl/Startup.cs +++ b/WotBlitzStatistics.GraphQl/Startup.cs @@ -8,6 +8,8 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using WotBlitzStatistics.GraphQl.ObjectTypes; using WotBlitzStatistics.GraphQl.Query; +using WotBlitzStatistics.Logic; +using WotBlitzStatisticsPro.Common.Model; using WotBlitzStatisticsPro.WgApiClient; using WotBlitzStatisticsPro.WgApiClient.Model; @@ -29,7 +31,7 @@ namespace WotBlitzStatistics.GraphQl Configuration.GetSection("WargamingApi").Bind(wgApiConfig); services.AddSingleton(wgApiConfig); - services.AddHttpClient(); + WotBlitzStatisticsLogicInstaller.ConfigureServices(services); // Global data loader - caches data between requests // ToDo: cause nullreference exception @@ -51,7 +53,9 @@ namespace WotBlitzStatistics.GraphQl //.AddSubscriptionType() .AddType() .AddType() - //.AddEnumType() + .AddEnumType() + .AddEnumType() + .AddEnumType() .Create()); } diff --git a/WotBlitzStatistics.GraphQl/WotBlitzStatistics.GraphQl.csproj b/WotBlitzStatistics.GraphQl/WotBlitzStatistics.GraphQl.csproj index 4ad9797..13b388e 100644 --- a/WotBlitzStatistics.GraphQl/WotBlitzStatistics.GraphQl.csproj +++ b/WotBlitzStatistics.GraphQl/WotBlitzStatistics.GraphQl.csproj @@ -15,8 +15,8 @@ + - diff --git a/WotBlitzStatistics.Logic/IWargamingSearch.cs b/WotBlitzStatistics.Logic/IWargamingSearch.cs new file mode 100644 index 0000000..9df0e50 --- /dev/null +++ b/WotBlitzStatistics.Logic/IWargamingSearch.cs @@ -0,0 +1,14 @@ +using System.Threading.Tasks; +using WotBlitzStatisticsPro.Common.Model; +using WotBlitzStatisticsPro.WgApiClient.Model; + +namespace WotBlitzStatistics.Logic +{ + public interface IWargamingSearch + { + Task FindAccounts( + string accountNick, + RealmType realmType, + RequestLanguage language); + } +} \ No newline at end of file diff --git a/WotBlitzStatistics.Logic/Mappers/AccountSearchResponseProfile.cs b/WotBlitzStatistics.Logic/Mappers/AccountSearchResponseProfile.cs new file mode 100644 index 0000000..d5d779e --- /dev/null +++ b/WotBlitzStatistics.Logic/Mappers/AccountSearchResponseProfile.cs @@ -0,0 +1,17 @@ +using AutoMapper; +using WotBlitzStatisticsPro.Common.Model; +using WotBlitzStatisticsPro.WgApiClient.Model; + +namespace WotBlitzStatistics.Logic.Mappers +{ + public class AccountSearchResponseProfile : Profile + { + public AccountSearchResponseProfile() + { + CreateMap() + .ForMember( + d => d.AccountId, + o => o.MapFrom(s => s.AccountId.Value)); + } + } +} \ No newline at end of file diff --git a/WotBlitzStatistics.Logic/WargamingSearch.cs b/WotBlitzStatistics.Logic/WargamingSearch.cs new file mode 100644 index 0000000..057f789 --- /dev/null +++ b/WotBlitzStatistics.Logic/WargamingSearch.cs @@ -0,0 +1,34 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using AutoMapper; +using WotBlitzStatisticsPro.Common.Model; +using WotBlitzStatisticsPro.WgApiClient; +using WotBlitzStatisticsPro.WgApiClient.Model; + +namespace WotBlitzStatistics.Logic +{ + public class WargamingSearch : IWargamingSearch + { + private readonly IWargamingApiClient _wargamingApiClient; + private readonly IMapper _mapper; + + public WargamingSearch(IWargamingApiClient wargamingApiClient, IMapper mapper) + { + _wargamingApiClient = wargamingApiClient; + _mapper = mapper; + } + + public async Task FindAccounts( + string accountNick, + RealmType realmType, + RequestLanguage language) + { + var response = await _wargamingApiClient.FindAccounts(accountNick, realmType, language); + return new AccountsSearchResponse + { + AccountsCount = response.Count, + Accounts = _mapper.Map, List>(response) + }; + } + } +} \ No newline at end of file diff --git a/WotBlitzStatistics.Logic/WotBlitzStatistics.Logic.csproj b/WotBlitzStatistics.Logic/WotBlitzStatistics.Logic.csproj new file mode 100644 index 0000000..a8417a4 --- /dev/null +++ b/WotBlitzStatistics.Logic/WotBlitzStatistics.Logic.csproj @@ -0,0 +1,19 @@ + + + + netstandard2.1 + + + + + + + + + + + + + + + diff --git a/WotBlitzStatistics.Logic/WotBlitzStatisticsLogicInstaller.cs b/WotBlitzStatistics.Logic/WotBlitzStatisticsLogicInstaller.cs new file mode 100644 index 0000000..ea0f9e9 --- /dev/null +++ b/WotBlitzStatistics.Logic/WotBlitzStatisticsLogicInstaller.cs @@ -0,0 +1,16 @@ +using AutoMapper; +using Microsoft.Extensions.DependencyInjection; +using WotBlitzStatisticsPro.WgApiClient; + +namespace WotBlitzStatistics.Logic +{ + public static class WotBlitzStatisticsLogicInstaller + { + public static void ConfigureServices(IServiceCollection services) + { + services.AddAutoMapper(typeof(WotBlitzStatisticsLogicInstaller)); + services.AddHttpClient(); + services.AddTransient(); + } + } +} \ No newline at end of file diff --git a/WotBlitzStatisticsPro.sln b/WotBlitzStatisticsPro.sln index fe1c6a3..c58b4ae 100644 --- a/WotBlitzStatisticsPro.sln +++ b/WotBlitzStatisticsPro.sln @@ -7,13 +7,15 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WotBlitzStatisticsPro.UI", EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WotBlitzStatisticsPro.UI.Server", "WotBlitzStatisticsPro.UI.Server\WotBlitzStatisticsPro.UI.Server.csproj", "{132C4637-1C92-4A8E-BD26-CEC0EFA9D05A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WotBlitzStatisticsPro.Common", "WotBlitzStatisticsPro.Common\WotBlitzStatisticsPro.Common.csproj", "{2802CC24-35D6-48CE-9BC4-7080F9335C88}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WotBlitzStatisticsPro.Common", "WotBlitzStatisticsPro.Common\WotBlitzStatisticsPro.Common.csproj", "{2802CC24-35D6-48CE-9BC4-7080F9335C88}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WotBlitzStatisticsPro.UI.Wasm", "WotBlitzStatisticsPro.Wasm\WotBlitzStatisticsPro.UI.Wasm.csproj", "{57E96A78-BDA4-4023-9965-EC755C68D033}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WotBlitzStatisticsPro.UI.Wasm", "WotBlitzStatisticsPro.Wasm\WotBlitzStatisticsPro.UI.Wasm.csproj", "{57E96A78-BDA4-4023-9965-EC755C68D033}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WotBlitzStatistics.GraphQl", "WotBlitzStatistics.GraphQl\WotBlitzStatistics.GraphQl.csproj", "{9B268E2D-38A5-4755-BAEC-BAF1DC7DCEC7}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WotBlitzStatistics.GraphQl", "WotBlitzStatistics.GraphQl\WotBlitzStatistics.GraphQl.csproj", "{9B268E2D-38A5-4755-BAEC-BAF1DC7DCEC7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WotBlitzStatisticsPro.WgApiClient", "WotBlitzStatisticsPro.WgApiClient\WotBlitzStatisticsPro.WgApiClient.csproj", "{E1AB7997-C2A1-433B-A4F5-F8E9C4B73515}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WotBlitzStatisticsPro.WgApiClient", "WotBlitzStatisticsPro.WgApiClient\WotBlitzStatisticsPro.WgApiClient.csproj", "{E1AB7997-C2A1-433B-A4F5-F8E9C4B73515}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WotBlitzStatistics.Logic", "WotBlitzStatistics.Logic\WotBlitzStatistics.Logic.csproj", "{0E04D1C0-DFB9-4BD3-B540-DD207358850C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -45,6 +47,10 @@ Global {E1AB7997-C2A1-433B-A4F5-F8E9C4B73515}.Debug|Any CPU.Build.0 = Debug|Any CPU {E1AB7997-C2A1-433B-A4F5-F8E9C4B73515}.Release|Any CPU.ActiveCfg = Release|Any CPU {E1AB7997-C2A1-433B-A4F5-F8E9C4B73515}.Release|Any CPU.Build.0 = Release|Any CPU + {0E04D1C0-DFB9-4BD3-B540-DD207358850C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0E04D1C0-DFB9-4BD3-B540-DD207358850C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0E04D1C0-DFB9-4BD3-B540-DD207358850C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0E04D1C0-DFB9-4BD3-B540-DD207358850C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/WotBlitzStatististics.Logic/WotBlitzStatististics.Logic.csproj b/WotBlitzStatististics.Logic/WotBlitzStatististics.Logic.csproj new file mode 100644 index 0000000..d4c395e --- /dev/null +++ b/WotBlitzStatististics.Logic/WotBlitzStatististics.Logic.csproj @@ -0,0 +1,7 @@ + + + + netstandard2.1 + + +