diff --git a/WotBlitzStatisticsPro.Common/Dictionaries/AchievementSectionDictionary.cs b/WotBlitzStatisticsPro.Common/Dictionaries/AchievementSectionDictionary.cs
new file mode 100644
index 0000000..0d6d7d1
--- /dev/null
+++ b/WotBlitzStatisticsPro.Common/Dictionaries/AchievementSectionDictionary.cs
@@ -0,0 +1,27 @@
+using System.Collections.Generic;
+using WotBlitzStatisticsPro.Common.Model;
+
+namespace WotBlitzStatisticsPro.Common.Dictionaries
+{
+ ///
+ /// Achievement section dictionary item.
+ ///
+ public class AchievementSectionDictionary
+ {
+ ///
+ /// Achievement section id
+ ///
+ public string AchievementSectionId { get; set; }
+
+ ///
+ /// Section order
+ ///
+ public int Order { get; set; }
+
+ ///
+ /// Localized section names
+ ///
+ public Dictionary AchievementSectionNames { get; set; }
+
+ }
+}
\ No newline at end of file
diff --git a/WotBlitzStatisticsPro.Common/Dictionaries/ClanRoleDictionary.cs b/WotBlitzStatisticsPro.Common/Dictionaries/ClanRoleDictionary.cs
new file mode 100644
index 0000000..1ad9544
--- /dev/null
+++ b/WotBlitzStatisticsPro.Common/Dictionaries/ClanRoleDictionary.cs
@@ -0,0 +1,21 @@
+using System.Collections.Generic;
+using WotBlitzStatisticsPro.Common.Model;
+
+namespace WotBlitzStatisticsPro.Common.Dictionaries
+{
+ ///
+ /// Clan role dictionary item
+ ///
+ public class ClanRoleDictionary
+ {
+ ///
+ /// Clan role id
+ ///
+ public string ClanRoleId { get; set; }
+
+ ///
+ /// Localized clan role names
+ ///
+ public Dictionary ClanRoleNames { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/WotBlitzStatisticsPro.Common/Dictionaries/LanguageDictionary.cs b/WotBlitzStatisticsPro.Common/Dictionaries/LanguageDictionary.cs
new file mode 100644
index 0000000..79fe166
--- /dev/null
+++ b/WotBlitzStatisticsPro.Common/Dictionaries/LanguageDictionary.cs
@@ -0,0 +1,19 @@
+namespace WotBlitzStatisticsPro.Common.Dictionaries
+{
+ ///
+ /// Languages available
+ ///
+ public class LanguageDictionary
+ {
+ ///
+ /// Language id
+ ///
+ public string LanguageId { get; set; }
+
+ ///
+ /// Language
+ ///
+ public string LanguageName { get; set; }
+
+ }
+}
\ No newline at end of file
diff --git a/WotBlitzStatisticsPro.Common/Dictionaries/NationDictionary.cs b/WotBlitzStatisticsPro.Common/Dictionaries/NationDictionary.cs
new file mode 100644
index 0000000..8908779
--- /dev/null
+++ b/WotBlitzStatisticsPro.Common/Dictionaries/NationDictionary.cs
@@ -0,0 +1,21 @@
+using System.Collections.Generic;
+using WotBlitzStatisticsPro.Common.Model;
+
+namespace WotBlitzStatisticsPro.Common.Dictionaries
+{
+ ///
+ /// Tanks nations dictionary item
+ ///
+ public class NationDictionary
+ {
+ ///
+ /// Nation id
+ ///
+ public string NationId { get; set; }
+
+ ///
+ /// Nation
+ ///
+ public Dictionary NationNames { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/WotBlitzStatisticsPro.Common/Dictionaries/VehicleTypeDictionary.cs b/WotBlitzStatisticsPro.Common/Dictionaries/VehicleTypeDictionary.cs
new file mode 100644
index 0000000..e755e57
--- /dev/null
+++ b/WotBlitzStatisticsPro.Common/Dictionaries/VehicleTypeDictionary.cs
@@ -0,0 +1,22 @@
+using System.Collections.Generic;
+using WotBlitzStatisticsPro.Common.Model;
+
+namespace WotBlitzStatisticsPro.Common.Dictionaries
+{
+ ///
+ /// Vehicle type dictionary item
+ ///
+ public class VehicleTypeDictionary
+ {
+ ///
+ /// Vehicle type id
+ ///
+ public string VehicleTypeId { get; set; }
+
+ ///
+ /// Vehicle type localized name
+ ///
+ public Dictionary VehicleTypeNames { get; set; }
+
+ }
+}
\ No newline at end of file
diff --git a/WotBlitzStatisticsPro.Logic/Dictionaries/StaticDictionariesUpdater.cs b/WotBlitzStatisticsPro.Logic/Dictionaries/StaticDictionariesUpdater.cs
index 983da5e..bc5e4bb 100644
--- a/WotBlitzStatisticsPro.Logic/Dictionaries/StaticDictionariesUpdater.cs
+++ b/WotBlitzStatisticsPro.Logic/Dictionaries/StaticDictionariesUpdater.cs
@@ -1,32 +1,164 @@
using System;
+using System.Collections.Generic;
+using System.Linq;
using System.Threading.Tasks;
+using AutoMapper;
+using WotBlitzStatisticsPro.Common.Dictionaries;
using WotBlitzStatisticsPro.Common.Model;
using WotBlitzStatisticsPro.WgApiClient;
+using WotBlitzStatisticsPro.WgApiClient.Model;
namespace WotBlitzStatisticsPro.Logic.Dictionaries
{
public class StaticDictionariesUpdater : IDictionaryUpdater
{
private readonly IWargamingDictionariesApiClient _wargamingDictionariesApiClient;
+ private readonly IMapper _mapper;
- public StaticDictionariesUpdater(IWargamingDictionariesApiClient wargamingDictionariesApiClient)
+ public StaticDictionariesUpdater(
+ IWargamingDictionariesApiClient wargamingDictionariesApiClient,
+ IMapper mapper)
{
_wargamingDictionariesApiClient = wargamingDictionariesApiClient;
+ _mapper = mapper;
}
public async Task 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
- }
+ var (
+ languages,
+ nations,
+ vehicleTypes,
+ clanRoles,
+ achievementsSections) = await GetAndMapDictionaries();
// ToDo: Save dictionary to Mongo
+ // ToDo: create unit tests
+
throw new System.NotImplementedException();
}
+
+ private async Task<(
+ List,
+ List,
+ List,
+ List,
+ List)> GetAndMapDictionaries()
+ {
+ var defaultRealmType = RealmType.Eu;
+
+ List languages = null;
+ var nations = new List();
+ var vehicleTypes = new List();
+ var clanRoles = new List();
+ var achievementsSections = new List();
+
+ foreach (var requestLanguage in (RequestLanguage[])Enum.GetValues(typeof(RequestLanguage)))
+ {
+ var (wotEncyclopediaInfoResponse, wotClanMembersDictionaryResponse) =
+ await _wargamingDictionariesApiClient.GetStaticDictionariesAsync(defaultRealmType, requestLanguage);
+
+ if (languages == null)
+ {
+ languages =
+ _mapper.Map, List>(wotEncyclopediaInfoResponse
+ .Languages);
+ }
+
+ MapVehicleNations(requestLanguage, wotEncyclopediaInfoResponse.VehicleNations, nations);
+ MapVehicleTypes(requestLanguage, wotEncyclopediaInfoResponse.VehicleTypes, vehicleTypes);
+ MapClanRoles(requestLanguage, wotClanMembersDictionaryResponse.ClanRoles, clanRoles);
+ MapAchievementsSections(requestLanguage, wotEncyclopediaInfoResponse.AchievementSections, achievementsSections);
+ }
+
+ return (languages, nations, vehicleTypes, clanRoles, achievementsSections);
+ }
+
+ private void MapVehicleNations(
+ RequestLanguage requestLanguage,
+ Dictionary sourceDictionary,
+ List destinationDictionary)
+ {
+ foreach (var source in sourceDictionary)
+ {
+ var destinationItem = destinationDictionary.FirstOrDefault(d => d.NationId == source.Key);
+ if (destinationItem == null)
+ {
+ destinationItem = new NationDictionary
+ {
+ NationId = source.Key, NationNames = new Dictionary()
+ };
+ destinationDictionary.Add(destinationItem);
+ }
+
+ destinationItem.NationNames[requestLanguage] = source.Value;
+ }
+ }
+
+ private void MapVehicleTypes(
+ RequestLanguage requestLanguage,
+ Dictionary sourceDictionary,
+ List destinationDictionary)
+ {
+ foreach (var source in sourceDictionary)
+ {
+ var destinationItem = destinationDictionary.FirstOrDefault(d => d.VehicleTypeId == source.Key);
+ if (destinationItem == null)
+ {
+ destinationItem = new VehicleTypeDictionary
+ {
+ VehicleTypeId = source.Key, VehicleTypeNames = new Dictionary()
+ };
+ destinationDictionary.Add(destinationItem);
+ }
+
+ destinationItem.VehicleTypeNames[requestLanguage] = source.Value;
+ }
+ }
+
+ private void MapClanRoles(
+ RequestLanguage requestLanguage,
+ Dictionary sourceDictionary,
+ List destinationDictionary)
+ {
+ foreach (var source in sourceDictionary)
+ {
+ var destinationItem = destinationDictionary.FirstOrDefault(d => d.ClanRoleId == source.Key);
+ if (destinationItem == null)
+ {
+ destinationItem = new ClanRoleDictionary
+ {
+ ClanRoleId = source.Key, ClanRoleNames = new Dictionary()
+ };
+ destinationDictionary.Add(destinationItem);
+ }
+
+ destinationItem.ClanRoleNames[requestLanguage] = source.Value;
+ }
+ }
+
+ private void MapAchievementsSections(
+ RequestLanguage requestLanguage,
+ Dictionary sourceSections,
+ List destinationDictionary)
+ {
+ foreach (var section in sourceSections)
+ {
+ var destinationItem =
+ destinationDictionary.FirstOrDefault(d => d.AchievementSectionId == section.Key);
+ if (destinationItem == null)
+ {
+ destinationItem = new AchievementSectionDictionary
+ {
+ AchievementSectionId = section.Key,
+ Order = Convert.ToInt32(section.Value.Order),
+ AchievementSectionNames = new Dictionary()
+ };
+ destinationDictionary.Add(destinationItem);
+ }
+
+ destinationItem.AchievementSectionNames[requestLanguage] = section.Value.Name;
+ }
+ }
}
}
\ No newline at end of file
diff --git a/WotBlitzStatisticsPro.Logic/Mappers/DictionaryLanguageMapper.cs b/WotBlitzStatisticsPro.Logic/Mappers/DictionaryLanguageMapper.cs
new file mode 100644
index 0000000..db6d578
--- /dev/null
+++ b/WotBlitzStatisticsPro.Logic/Mappers/DictionaryLanguageMapper.cs
@@ -0,0 +1,16 @@
+using System.Collections.Generic;
+using AutoMapper;
+using WotBlitzStatisticsPro.Common.Dictionaries;
+
+namespace WotBlitzStatisticsPro.Logic.Mappers
+{
+ public class DictionaryLanguageMapper : Profile
+ {
+ public DictionaryLanguageMapper()
+ {
+ CreateMap, LanguageDictionary>()
+ .ForMember(dest => dest.LanguageId, op => op.MapFrom(s => s.Key))
+ .ForMember(dest => dest.LanguageName, op => op.MapFrom(svm => svm.Value));
+ }
+ }
+}
\ No newline at end of file