From ccc5c768b3aa687b9519efd2c6119133c9646d51 Mon Sep 17 00:00:00 2001 From: Mikhail Shabanov Date: Sun, 27 Dec 2020 17:20:57 +0100 Subject: [PATCH] Some errors fix --- .../Model/AccountInfoResponse.cs | 12 +- .../DictionariesUpdaterResolver.cs | 2 +- .../Mappers/VehicleDictionaryProfile.cs | 7 +- .../WargamingAccounts.cs | 143 +++++++++++------- .../WargamingDictionaries.cs | 23 ++- .../WotBlitzStatisticsLogicInstaller.cs | 2 +- .../DictionariesServiceTests.cs | 4 +- 7 files changed, 119 insertions(+), 74 deletions(-) diff --git a/WotBlitzStatisticsPro.Common/Model/AccountInfoResponse.cs b/WotBlitzStatisticsPro.Common/Model/AccountInfoResponse.cs index dea75a5..9e2bc48 100644 --- a/WotBlitzStatisticsPro.Common/Model/AccountInfoResponse.cs +++ b/WotBlitzStatisticsPro.Common/Model/AccountInfoResponse.cs @@ -16,17 +16,17 @@ namespace WotBlitzStatisticsPro.Common.Model /// /// Account creation date /// - public DateTime CreatedAt { get; set; } + public DateTime CreatedAt { get; set; } = new DateTime(1970, 1, 1); /// /// Last battle time /// - public DateTime LastBattleTime { get; set; } + public DateTime LastBattleTime { get; set; } = new DateTime(1970, 1, 1); - /// - /// Player's nick - /// - public string? Nickname { get; set; } + /// + /// Player's nick + /// + public string? Nickname { get; set; } /// /// Battles count diff --git a/WotBlitzStatisticsPro.Logic/Dictionaries/DictionariesUpdaterResolver.cs b/WotBlitzStatisticsPro.Logic/Dictionaries/DictionariesUpdaterResolver.cs index 70d3db1..1da037d 100644 --- a/WotBlitzStatisticsPro.Logic/Dictionaries/DictionariesUpdaterResolver.cs +++ b/WotBlitzStatisticsPro.Logic/Dictionaries/DictionariesUpdaterResolver.cs @@ -7,6 +7,6 @@ namespace WotBlitzStatisticsPro.Logic.Dictionaries /// /// Dictionary type for resolving service. /// Updater service. - public delegate IDictionaryUpdater DictionariesUpdaterResolver(DictionaryType dictionaryType); + public delegate IDictionaryUpdater? DictionariesUpdaterResolver(DictionaryType dictionaryType); } \ No newline at end of file diff --git a/WotBlitzStatisticsPro.Logic/Mappers/VehicleDictionaryProfile.cs b/WotBlitzStatisticsPro.Logic/Mappers/VehicleDictionaryProfile.cs index 83bddd1..49be930 100644 --- a/WotBlitzStatisticsPro.Logic/Mappers/VehicleDictionaryProfile.cs +++ b/WotBlitzStatisticsPro.Logic/Mappers/VehicleDictionaryProfile.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using AutoMapper; using WotBlitzStatisticsPro.Common.Dictionaries; using WotBlitzStatisticsPro.DataAccess.Model; @@ -26,9 +27,9 @@ namespace WotBlitzStatisticsPro.Logic.Mappers .ForMember(d => d.NormalImage, o => o.MapFrom(s => s.Images == null ? string.Empty : s.Images["normal"])) .ForMember(d => d.PriceCredit, - o => o.MapFrom(s => s.Cost == null ? string.Empty : s.Cost["price_credit"])) + o => o.MapFrom(s => s.Cost == null ? decimal.Zero : Convert.ToDecimal(s.Cost["price_credit"]))) .ForMember(d => d.PriceGold, - o => o.MapFrom(s => s.Cost == null ? string.Empty : s.Cost["price_gold"])) + o => o.MapFrom(s => s.Cost == null ? decimal.Zero : Convert.ToDecimal(s.Cost["price_gold"]))) .ForMember(d => d.NexTanksInTree, o => o.MapFrom(s => s.NextTanks)) diff --git a/WotBlitzStatisticsPro.Logic/WargamingAccounts.cs b/WotBlitzStatisticsPro.Logic/WargamingAccounts.cs index 4a07688..74c1efd 100644 --- a/WotBlitzStatisticsPro.Logic/WargamingAccounts.cs +++ b/WotBlitzStatisticsPro.Logic/WargamingAccounts.cs @@ -1,5 +1,6 @@ using System; using System.Threading.Tasks; +using Microsoft.Extensions.Logging; using WotBlitzStatisticsPro.Common.Model; using WotBlitzStatisticsPro.Logic.AccountInformationPipeline; using WotBlitzStatisticsPro.Logic.AccountInformationPipeline.OperationContext; @@ -11,31 +12,45 @@ namespace WotBlitzStatisticsPro.Logic public class WargamingAccounts: IWargamingAccounts { private readonly IOperationFactory _operationFactory; + private readonly ILogger _logger; - public WargamingAccounts(IOperationFactory operationFactory) + public WargamingAccounts(IOperationFactory operationFactory, ILogger logger) { _operationFactory = operationFactory; + _logger = logger; } - public async Task GatherAccountInformation(RealmType realm, long accountId, RequestLanguage requestLanguage) + public async Task GatherAccountInformation(RealmType realm, long accountId, + RequestLanguage requestLanguage) { var contextData = new AccountInformationPipelineContextData(); - var context = new OperationContext(new AccountRequest(accountId, realm, requestLanguage)); - context.AddOrReplace(contextData); - var pipeline = new Pipeline(_operationFactory); - - pipeline.AddOperation() - .AddOperation() - .AddOperation() - .AddOperation() - ; - - var firstOperation = pipeline.Build(); - if (firstOperation != null) + try { - await firstOperation - .Invoke(context, null) - .ConfigureAwait(false); + + var context = new OperationContext(new AccountRequest(accountId, realm, requestLanguage)); + context.AddOrReplace(contextData); + var pipeline = new Pipeline(_operationFactory); + + pipeline.AddOperation() + .AddOperation() + .AddOperation() + .AddOperation() + ; + + var firstOperation = pipeline.Build(); + if (firstOperation != null) + { + await firstOperation + .Invoke(context, null) + .ConfigureAwait(false); + } + + } + catch (Exception e) + { + _logger.LogError(e, "GatherAccountInformation error"); + + throw; } return contextData?.Response ?? new AccountInfoResponse(); @@ -44,55 +59,71 @@ namespace WotBlitzStatisticsPro.Logic public async Task GatherAndSaveAccountInformation(RealmType realm, long accountId, RequestLanguage requestLanguage) { var contextData = new AccountInformationPipelineContextData(); - var context = new OperationContext(new AccountRequest(accountId, realm, requestLanguage)); - context.AddOrReplace(contextData); - var pipeline = new Pipeline(_operationFactory); - - pipeline.AddOperation() - .AddOperation() - .AddOperation() - .AddOperation() - .AddOperation() - .AddOperation() - .AddOperation() - ; - - var firstOperation = pipeline.Build(); - if (firstOperation != null) + try { - await firstOperation - .Invoke(context, null) - .ConfigureAwait(false); - } + var context = new OperationContext(new AccountRequest(accountId, realm, requestLanguage)); + context.AddOrReplace(contextData); + var pipeline = new Pipeline(_operationFactory); + + pipeline.AddOperation() + .AddOperation() + .AddOperation() + .AddOperation() + .AddOperation() + .AddOperation() + .AddOperation() + ; + + var firstOperation = pipeline.Build(); + if (firstOperation != null) + { + await firstOperation + .Invoke(context, null) + .ConfigureAwait(false); + } + } + catch (Exception e) + { + _logger.LogError(e, "GatherAndSaveAccountInformation error"); + + throw; + } return contextData?.Response ?? new AccountInfoResponse(); } public async Task GetAccountInfoHistory(RealmType realm, long accountId, DateTime startDate, RequestLanguage requestLanguage) { var contextData = new AccountHistoryInformationPipelineContextData(startDate); - var context = new OperationContext(new AccountRequest(accountId, realm, requestLanguage)); - context.AddOrReplace(contextData); - var pipeline = new Pipeline(_operationFactory); - - pipeline.AddOperation() - .AddOperation() - .AddOperation() - .AddOperation() - .AddOperation() - .AddOperation() - .AddOperation() - .AddOperation() - ; - - var firstOperation = pipeline.Build(); - if (firstOperation != null) + try { - await firstOperation - .Invoke(context, null) - .ConfigureAwait(false); - } + var context = new OperationContext(new AccountRequest(accountId, realm, requestLanguage)); + context.AddOrReplace(contextData); + var pipeline = new Pipeline(_operationFactory); + pipeline.AddOperation() + .AddOperation() + .AddOperation() + .AddOperation() + .AddOperation() + .AddOperation() + .AddOperation() + .AddOperation() + ; + + var firstOperation = pipeline.Build(); + if (firstOperation != null) + { + await firstOperation + .Invoke(context, null) + .ConfigureAwait(false); + } + } + catch (Exception e) + { + _logger.LogError(e, "GetAccountInfoHistory error"); + throw; + } return contextData?.Response ?? new AccountInfoHistoryResponse(); } } diff --git a/WotBlitzStatisticsPro.Logic/WargamingDictionaries.cs b/WotBlitzStatisticsPro.Logic/WargamingDictionaries.cs index 2d2548a..585a6c9 100644 --- a/WotBlitzStatisticsPro.Logic/WargamingDictionaries.cs +++ b/WotBlitzStatisticsPro.Logic/WargamingDictionaries.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; +using Microsoft.Extensions.Logging; using WotBlitzStatisticsPro.Common.Model; using WotBlitzStatisticsPro.Logic.Dictionaries; @@ -9,27 +10,37 @@ namespace WotBlitzStatisticsPro.Logic public class WargamingDictionaries: IWargamingDictionaries { private readonly DictionariesUpdaterResolver _dictionaryUpdaterFactoryMethod; + private readonly ILogger _logger; - public WargamingDictionaries(DictionariesUpdaterResolver dictionaryUpdaterFactoryMethod) + public WargamingDictionaries(DictionariesUpdaterResolver dictionaryUpdaterFactoryMethod, ILogger logger) { _dictionaryUpdaterFactoryMethod = dictionaryUpdaterFactoryMethod; + _logger = logger; } public async Task UpdateDictionaries(UpdateDictionariesRequest updateDictionariesRequest) { var response = new List(); - foreach (var dictionaryType in (DictionaryType[])Enum.GetValues(typeof(DictionaryType))) + try { - if ((updateDictionariesRequest.DictionaryTypes & dictionaryType) != 0) + foreach (var dictionaryType in (DictionaryType[]) Enum.GetValues(typeof(DictionaryType))) { - var dictionaryUpdater = _dictionaryUpdaterFactoryMethod(dictionaryType); - if (dictionaryUpdater != null) + if ((updateDictionariesRequest.DictionaryTypes & dictionaryType) != 0) { - response.Add(await dictionaryUpdater.Update()); + var dictionaryUpdater = _dictionaryUpdaterFactoryMethod(dictionaryType); + if (dictionaryUpdater != null) + { + response.Add(await dictionaryUpdater.Update()); + } } } } + catch (Exception e) + { + _logger.LogError(e, "UpdateDictionaries error"); + throw; + } return response.ToArray(); } diff --git a/WotBlitzStatisticsPro.Logic/WotBlitzStatisticsLogicInstaller.cs b/WotBlitzStatisticsPro.Logic/WotBlitzStatisticsLogicInstaller.cs index 148aa45..db5ac71 100644 --- a/WotBlitzStatisticsPro.Logic/WotBlitzStatisticsLogicInstaller.cs +++ b/WotBlitzStatisticsPro.Logic/WotBlitzStatisticsLogicInstaller.cs @@ -49,7 +49,7 @@ namespace WotBlitzStatisticsPro.Logic DictionaryType.StaticDictionaries => serviceProvider.GetService()!, DictionaryType.Achievements => serviceProvider.GetService()!, DictionaryType.Vehicles => serviceProvider.GetService()!, - _ => throw new ApplicationException($"Unknown dictionary type '{dictionaryType}'") + _ => null }; }); } diff --git a/WotBlitzStatisticsPro.Tests/DictionariesTests/DictionariesServiceTests.cs b/WotBlitzStatisticsPro.Tests/DictionariesTests/DictionariesServiceTests.cs index e42cd09..03d02d8 100644 --- a/WotBlitzStatisticsPro.Tests/DictionariesTests/DictionariesServiceTests.cs +++ b/WotBlitzStatisticsPro.Tests/DictionariesTests/DictionariesServiceTests.cs @@ -1,5 +1,6 @@ using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; using Moq; using NUnit.Framework; using WotBlitzStatisticsPro.Common.Model; @@ -40,7 +41,8 @@ namespace WotBlitzStatisticsPro.Tests.DictionariesTests var services = serviceProvider.BuildServiceProvider(); - _wargamingDictionaries = new WargamingDictionaries(services.GetService()); + _wargamingDictionaries = new WargamingDictionaries(services.GetService(), + (new Mock>()).Object); } [Test]