Dictionaries updater factory

This commit is contained in:
Mikhail Shabanov committed 2020-05-29 23:03:32 +02:00
1 parent cdf7ec5130
commit 32f7245d85
11 files changed
+279 -21

No files matched your search

@@ -0,0 +1,13 @@
using System.Threading.Tasks;
using WotBlitzStatisticsPro.Common.Model;
namespace WotBlitzStatisticsPro.Logic.Dictionaries
{
public class AchievementsDictionaryUpdater : IDictionaryUpdater
{
public Task<UpdateDictionariesResponseItem> Update()
{
throw new System.NotImplementedException();
}
}
}
@@ -0,0 +1,12 @@
using WotBlitzStatisticsPro.Common.Model;
namespace WotBlitzStatisticsPro.Logic.Dictionaries
{
/// <summary>
/// Dictionaries updater factory method.
/// </summary>
/// <param name="dictionaryType">Dictionary type for resolving service.</param>
/// <returns>Updater service.</returns>
public delegate IDictionaryUpdater DictionariesUpdaterResolver(DictionaryType dictionaryType);
}
@@ -0,0 +1,10 @@
using System.Threading.Tasks;
using WotBlitzStatisticsPro.Common.Model;
namespace WotBlitzStatisticsPro.Logic.Dictionaries
{
public interface IDictionaryUpdater
{
Task<UpdateDictionariesResponseItem> Update();
}
}
@@ -0,0 +1,32 @@
using System;
using System.Threading.Tasks;
using WotBlitzStatisticsPro.Common.Model;
using WotBlitzStatisticsPro.WgApiClient;
namespace WotBlitzStatisticsPro.Logic.Dictionaries
{
public class StaticDictionariesUpdater : IDictionaryUpdater
{
private readonly IWargamingDictionariesApiClient _wargamingDictionariesApiClient;
public StaticDictionariesUpdater(IWargamingDictionariesApiClient wargamingDictionariesApiClient)
{
_wargamingDictionariesApiClient = wargamingDictionariesApiClient;
}
public async Task<UpdateDictionariesResponseItem> Update()
{
var defaultRealmType = RealmType.Eu;
foreach (var requestLanguage in (RequestLanguage[]) Enum.GetValues(typeof(RequestLanguage)))
{
var (WotEncyclopediaInfoResponse, WotClanMembersDictionaryResponse) =
await _wargamingDictionariesApiClient.GetStaticDictionariesAsync(defaultRealmType, requestLanguage);
// ToDo: map
// ToDo: add to dictionary
}
// ToDo: Save dictionary to Mongo
throw new System.NotImplementedException();
}
}
}
@@ -0,0 +1,13 @@
using System.Threading.Tasks;
using WotBlitzStatisticsPro.Common.Model;
namespace WotBlitzStatisticsPro.Logic.Dictionaries
{
public class VehiclesDictionaryUpdater : IDictionaryUpdater
{
public Task<UpdateDictionariesResponseItem> Update()
{
throw new System.NotImplementedException();
}
}
}
@@ -1,29 +1,34 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using WotBlitzStatisticsPro.Common.Model;
using WotBlitzStatisticsPro.Logic.Dictionaries;
namespace WotBlitzStatisticsPro.Logic
{
public class WargamingDictionaries: IWargamingDictionaries
{
public Task<UpdateDictionariesResponseItem[]> UpdateDictionaries(UpdateDictionariesRequest updateDictionariesRequest)
private readonly DictionariesUpdaterResolver _dictionaryUpdaterFactoryMethod;
public WargamingDictionaries(DictionariesUpdaterResolver dictionaryUpdaterFactoryMethod)
{
_dictionaryUpdaterFactoryMethod = dictionaryUpdaterFactoryMethod;
}
public async Task<UpdateDictionariesResponseItem[]> UpdateDictionaries(UpdateDictionariesRequest updateDictionariesRequest)
{
var response = new List<UpdateDictionariesResponseItem>();
// ToDo: Make factory
if ((updateDictionariesRequest.DictionaryTypes & DictionaryType.StaticDictionaries) != 0)
foreach (var dictionaryType in (DictionaryType[])Enum.GetValues(typeof(DictionaryType)))
{
// Update static
}
if ((updateDictionariesRequest.DictionaryTypes & DictionaryType.Achievements) != 0)
{
// Update achievements
}
if ((updateDictionariesRequest.DictionaryTypes & DictionaryType.Vehicles) != 0)
{
// Update vehicles
if ((updateDictionariesRequest.DictionaryTypes & dictionaryType) != 0)
{
var dictionaryUpdater = _dictionaryUpdaterFactoryMethod(dictionaryType);
response.Add(await dictionaryUpdater.Update());
}
}
return Task.FromResult(response.ToArray());
return response.ToArray();
}
}
}
@@ -1,17 +1,47 @@
using AutoMapper;
using System.Collections.Generic;
using AutoMapper;
using Microsoft.Extensions.DependencyInjection;
using WotBlitzStatisticsPro.Common.Model;
using WotBlitzStatisticsPro.Logic.Dictionaries;
using WotBlitzStatisticsPro.WgApiClient;
namespace WotBlitzStatisticsPro.Logic
{
public static class WotBlitzStatisticsLogicInstaller
{
public static void ConfigureServices(IServiceCollection services)
{
ConfigureDictionariesFactory(services);
services.AddAutoMapper(typeof(WotBlitzStatisticsLogicInstaller));
services.AddHttpClient<IWargamingApiClient, WargamingApiClient>();
services.AddHttpClient<IWargamingDictionariesApiClient, WargamingApiClient>();
services.AddTransient<IWargamingSearch, WargamingSearch>();
services.AddTransient<IWargamingDictionaries, WargamingDictionaries>();
}
private static void ConfigureDictionariesFactory(IServiceCollection services)
{
services.AddTransient<StaticDictionariesUpdater>();
services.AddTransient<AchievementsDictionaryUpdater>();
services.AddTransient<VehiclesDictionaryUpdater>();
services.AddTransient<DictionariesUpdaterResolver>(serviceProvider => dictionaryType =>
{
switch (dictionaryType)
{
case DictionaryType.StaticDictionaries:
return serviceProvider.GetService<StaticDictionariesUpdater>();
case DictionaryType.Achievements:
return serviceProvider.GetService<AchievementsDictionaryUpdater>();
case DictionaryType.Vehicles:
return serviceProvider.GetService<VehiclesDictionaryUpdater>();
default:
throw new KeyNotFoundException(
$"Unable to find service for dictionary type '{dictionaryType}'");
}
});
}
}
}