Added tanks stat info operation and calculation tier and Wn7 operation

This commit is contained in:
Mikhail Shabanov committed 2020-09-22 17:54:35 +02:00
1 parent 3eeda15491
commit b343e36e0d
14 files changed
+394 -4

No files matched your search

@@ -1,4 +1,5 @@
using WotBlitzStatisticsPro.Common.Model;
using System.Collections.Generic;
using WotBlitzStatisticsPro.Common.Model;
using WotBlitzStatisticsPro.DataAccess.Model.Accounts;
namespace WotBlitzStatisticsPro.Logic.AccountInformationPipeline
@@ -24,5 +25,9 @@ namespace WotBlitzStatisticsPro.Logic.AccountInformationPipeline
public AccountInfoHistory AccountInfoHistory { get; set; }
public List<TankInfo> Tanks { get; set; }
public Dictionary<long, TankInfoHistory> TanksHistory { get; set; }
}
}
@@ -0,0 +1,39 @@
using System;
using System.Linq;
using System.Threading.Tasks;
using WotBlitzStatisticsPro.DataAccess;
using WotBlitzStatisticsPro.Logic.Calculations;
using WotBlitzStatisticsPro.Logic.Pipeline;
namespace WotBlitzStatisticsPro.Logic.AccountInformationPipeline.Operations
{
public class CalculateStatisticsOperation : IOperation<AccountInformationPipelineContext>
{
private readonly IDictionariesDataAccessor _dictionariesDataAccessor;
public CalculateStatisticsOperation(IDictionariesDataAccessor dictionariesDataAccessor)
{
_dictionariesDataAccessor = dictionariesDataAccessor;
}
public async Task Invoke(AccountInformationPipelineContext context, Func<AccountInformationPipelineContext, Task> next)
{
var tankIds = context.Tanks.Select(t => t.TankId).ToArray();
var tankTires = await _dictionariesDataAccessor.GetTankTires(tankIds);
foreach (var tankInfoHistory in context.TanksHistory)
{
if (!tankTires.ContainsKey(tankInfoHistory.Key))
{
continue;
}
tankInfoHistory.Value.CalculateWn7(tankTires[tankInfoHistory.Key]);
}
context.AccountInfoHistory.CalculateMiddleTier(context.TanksHistory.Values.ToList(), tankTires);
context.AccountInfoHistory.CalculateWn7();
await next.Invoke(context);
}
}
}
@@ -1,8 +1,11 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using AutoMapper;
using WotBlitzStatisticsPro.DataAccess.Model.Accounts;
using WotBlitzStatisticsPro.Logic.Pipeline;
using WotBlitzStatisticsPro.WgApiClient;
using WotBlitzStatisticsPro.WgApiClient.Model;
namespace WotBlitzStatisticsPro.Logic.AccountInformationPipeline.Operations
{
@@ -24,6 +27,19 @@ namespace WotBlitzStatisticsPro.Logic.AccountInformationPipeline.Operations
var tanksInfo = await
_wargamingApi.GetPlayerAccountTanksInfo(context.AccountId, context.RealmType, context.RequestLanguage);
context.Tanks = new List<TankInfo>();
context.TanksHistory = new Dictionary<long, TankInfoHistory>();
tanksInfo.ForEach(tank =>
{
context.Tanks.Add(_mapper.Map<WotAccountTanksStatistics, TankInfo>(tank));
var stat = _mapper.Map<WotAccountTanksFullStatistics, TankInfoHistory>(tank.All);
stat.AccountId = tank.AccountId;
stat.TankId = tank.TankId;
stat.LastBattleTime = tank.LastBattleTime;
context.TanksHistory[stat.TankId] = stat;
});
await next.Invoke(context);
}
}