From 1c803585e111d59ef5f3a783f80302276deb56b0 Mon Sep 17 00:00:00 2001 From: Mikhail Shabanov Date: Sun, 1 Nov 2020 14:10:57 +0100 Subject: [PATCH] Account db read operation --- .../IWargamingAccountDataAccessor.cs | 7 ++++-- .../WargamingAccountDataAccessor.cs | 10 ++++++-- .../AccountInformationPipelineContext.cs | 2 ++ .../CheckLAstBattleDateOperation.cs | 19 +++++++++++++++ .../ReadAccountInfoFromDbOperation.cs | 23 +++++++++++++++++++ .../WargamingAccounts.cs | 3 ++- .../WotBlitzStatisticsLogicInstaller.cs | 2 ++ 7 files changed, 61 insertions(+), 5 deletions(-) create mode 100644 WotBlitzStatisticsPro.Logic/AccountInformationPipeline/Operations/CheckLAstBattleDateOperation.cs create mode 100644 WotBlitzStatisticsPro.Logic/AccountInformationPipeline/Operations/ReadAccountInfoFromDbOperation.cs diff --git a/WotBlitzStatisticsPro.DataAccess/IWargamingAccountDataAccessor.cs b/WotBlitzStatisticsPro.DataAccess/IWargamingAccountDataAccessor.cs index 0af5d0f..602ab04 100644 --- a/WotBlitzStatisticsPro.DataAccess/IWargamingAccountDataAccessor.cs +++ b/WotBlitzStatisticsPro.DataAccess/IWargamingAccountDataAccessor.cs @@ -1,7 +1,10 @@ -namespace WotBlitzStatisticsPro.DataAccess +using System.Threading.Tasks; +using WotBlitzStatisticsPro.DataAccess.Model.Accounts; + +namespace WotBlitzStatisticsPro.DataAccess { public interface IWargamingAccountDataAccessor { - + Task ReadAccountInfo(long accountId); } } \ No newline at end of file diff --git a/WotBlitzStatisticsPro.DataAccess/WargamingAccountDataAccessor.cs b/WotBlitzStatisticsPro.DataAccess/WargamingAccountDataAccessor.cs index 1ccad64..4b3cc55 100644 --- a/WotBlitzStatisticsPro.DataAccess/WargamingAccountDataAccessor.cs +++ b/WotBlitzStatisticsPro.DataAccess/WargamingAccountDataAccessor.cs @@ -1,4 +1,5 @@ -using MongoDB.Driver; +using System.Threading.Tasks; +using MongoDB.Driver; using WotBlitzStatisticsPro.Common; using WotBlitzStatisticsPro.DataAccess.Model.Accounts; @@ -63,6 +64,11 @@ namespace WotBlitzStatisticsPro.DataAccess .CreateOne(tankInfoHistoryIndexModel); } - // ToDo: Read account + public async Task ReadAccountInfo(long accountId) + { + var account = await _database.GetCollection(AccountInfoCollectionName) + .FindAsync(Builders.Filter.Where(a => a.AccountId == accountId)); + return account.FirstOrDefault(); + } } } \ No newline at end of file diff --git a/WotBlitzStatisticsPro.Logic/AccountInformationPipeline/AccountInformationPipelineContext.cs b/WotBlitzStatisticsPro.Logic/AccountInformationPipeline/AccountInformationPipelineContext.cs index dc16274..ed599bf 100644 --- a/WotBlitzStatisticsPro.Logic/AccountInformationPipeline/AccountInformationPipelineContext.cs +++ b/WotBlitzStatisticsPro.Logic/AccountInformationPipeline/AccountInformationPipelineContext.cs @@ -31,5 +31,7 @@ namespace WotBlitzStatisticsPro.Logic.AccountInformationPipeline public AccountInfoResponse Response { get; set; } + public AccountInfo DbAccountInfo { get; set; } + } } \ No newline at end of file diff --git a/WotBlitzStatisticsPro.Logic/AccountInformationPipeline/Operations/CheckLAstBattleDateOperation.cs b/WotBlitzStatisticsPro.Logic/AccountInformationPipeline/Operations/CheckLAstBattleDateOperation.cs new file mode 100644 index 0000000..9f0c8ae --- /dev/null +++ b/WotBlitzStatisticsPro.Logic/AccountInformationPipeline/Operations/CheckLAstBattleDateOperation.cs @@ -0,0 +1,19 @@ +using System; +using System.Threading.Tasks; +using WotBlitzStatisticsPro.Logic.Pipeline; + +namespace WotBlitzStatisticsPro.Logic.AccountInformationPipeline.Operations +{ + public class CheckLAstBattleDateOperation : IOperation + { + public Task Invoke(AccountInformationPipelineContext context, Func next) + { + if (context.DbAccountInfo == null || + context.DbAccountInfo.LastBattleTime >= context.AccountInfo.LastBattleTime) + { + return next.Invoke(context); + } + return Task.CompletedTask; + } + } +} \ No newline at end of file diff --git a/WotBlitzStatisticsPro.Logic/AccountInformationPipeline/Operations/ReadAccountInfoFromDbOperation.cs b/WotBlitzStatisticsPro.Logic/AccountInformationPipeline/Operations/ReadAccountInfoFromDbOperation.cs new file mode 100644 index 0000000..66a6b3e --- /dev/null +++ b/WotBlitzStatisticsPro.Logic/AccountInformationPipeline/Operations/ReadAccountInfoFromDbOperation.cs @@ -0,0 +1,23 @@ +using System; +using System.Threading.Tasks; +using WotBlitzStatisticsPro.DataAccess; +using WotBlitzStatisticsPro.Logic.Pipeline; + +namespace WotBlitzStatisticsPro.Logic.AccountInformationPipeline.Operations +{ + public class ReadAccountInfoFromDbOperation : IOperation + { + private readonly IWargamingAccountDataAccessor _accountDataAccessor; + + public ReadAccountInfoFromDbOperation(IWargamingAccountDataAccessor accountDataAccessor) + { + _accountDataAccessor = accountDataAccessor; + } + + public async Task Invoke(AccountInformationPipelineContext context, Func next) + { + context.DbAccountInfo = await _accountDataAccessor.ReadAccountInfo(context.AccountId); + await next.Invoke(context); + } + } +} \ No newline at end of file diff --git a/WotBlitzStatisticsPro.Logic/WargamingAccounts.cs b/WotBlitzStatisticsPro.Logic/WargamingAccounts.cs index 0a399fc..687cd2f 100644 --- a/WotBlitzStatisticsPro.Logic/WargamingAccounts.cs +++ b/WotBlitzStatisticsPro.Logic/WargamingAccounts.cs @@ -39,7 +39,8 @@ namespace WotBlitzStatisticsPro.Logic var pipeline = new Pipeline(_operationFactory); pipeline.AddOperation() - // ToDo: add operation for reading AccountFrom DB + .AddOperation() + .AddOperation() .AddOperation() .AddOperation() // ToDo: add operation for save info into DB diff --git a/WotBlitzStatisticsPro.Logic/WotBlitzStatisticsLogicInstaller.cs b/WotBlitzStatisticsPro.Logic/WotBlitzStatisticsLogicInstaller.cs index fc149a1..45c5409 100644 --- a/WotBlitzStatisticsPro.Logic/WotBlitzStatisticsLogicInstaller.cs +++ b/WotBlitzStatisticsPro.Logic/WotBlitzStatisticsLogicInstaller.cs @@ -60,6 +60,8 @@ namespace WotBlitzStatisticsPro.Logic private static void ConfigureOperationsFactory(IServiceCollection services) { services.AddTransient(); + services.AddTransient(); + services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient();