diff --git a/WotBlitzStatisticsPro.Common/Model/ClanInfoResponse.cs b/WotBlitzStatisticsPro.Common/Model/ClanInfoResponse.cs
index f9a01ee..d1b8cc6 100644
--- a/WotBlitzStatisticsPro.Common/Model/ClanInfoResponse.cs
+++ b/WotBlitzStatisticsPro.Common/Model/ClanInfoResponse.cs
@@ -91,6 +91,6 @@ namespace WotBlitzStatisticsPro.Common.Model
///
/// Clan info updated at
///
- public int? UpdatedAt { get; set; }
+ public DateTime? UpdatedAt { get; set; }
}
}
\ No newline at end of file
diff --git a/WotBlitzStatisticsPro.Common/Model/RealmAndLanguage.cs b/WotBlitzStatisticsPro.Common/Model/RealmAndLanguage.cs
index 3721c52..5f5c504 100644
--- a/WotBlitzStatisticsPro.Common/Model/RealmAndLanguage.cs
+++ b/WotBlitzStatisticsPro.Common/Model/RealmAndLanguage.cs
@@ -3,5 +3,5 @@
///
/// Represents pair of realm type a nd requested language
///
- public record RealmAndLanguage (RealmType realm, RequestLanguage language);
+ public record RealmAndLanguage (RealmType Realm, RequestLanguage Language);
}
\ No newline at end of file
diff --git a/WotBlitzStatisticsPro.DataAccess/DictionariesDataAccessor.cs b/WotBlitzStatisticsPro.DataAccess/DictionariesDataAccessor.cs
index 3635dc9..77d6969 100644
--- a/WotBlitzStatisticsPro.DataAccess/DictionariesDataAccessor.cs
+++ b/WotBlitzStatisticsPro.DataAccess/DictionariesDataAccessor.cs
@@ -139,5 +139,19 @@ namespace WotBlitzStatisticsPro.DataAccess
return collection.ToDictionary(n => n.typeId, n => n.typeValue);
}
+
+ public async Task> GetClanRoles(RequestLanguage language)
+ {
+ var collection = await _database.GetCollection(ClanRolesCollectionName)
+ .Find(Builders.Filter.Empty)
+ .Project(n => new
+ {
+ ClanRoleId = n.ClanRoleId,
+ ClanRoleValueValue = n.ClanRoleNames.First(v => v.Language == language).Value
+ })
+ .ToListAsync();
+
+ return collection.ToDictionary(n => n.ClanRoleId, n => n.ClanRoleValueValue);
+ }
}
}
\ No newline at end of file
diff --git a/WotBlitzStatisticsPro.DataAccess/IDictionariesDataAccessor.cs b/WotBlitzStatisticsPro.DataAccess/IDictionariesDataAccessor.cs
index f757ccc..0f4a5c9 100644
--- a/WotBlitzStatisticsPro.DataAccess/IDictionariesDataAccessor.cs
+++ b/WotBlitzStatisticsPro.DataAccess/IDictionariesDataAccessor.cs
@@ -30,5 +30,7 @@ namespace WotBlitzStatisticsPro.DataAccess
Task> GetNations(RequestLanguage language);
Task> GetTankTypes(RequestLanguage language);
+
+ Task> GetClanRoles(RequestLanguage language);
}
}
\ No newline at end of file
diff --git a/WotBlitzStatisticsPro.Logic/IWargamingClans.cs b/WotBlitzStatisticsPro.Logic/IWargamingClans.cs
index 6e568e8..e013732 100644
--- a/WotBlitzStatisticsPro.Logic/IWargamingClans.cs
+++ b/WotBlitzStatisticsPro.Logic/IWargamingClans.cs
@@ -5,6 +5,6 @@ namespace WotBlitzStatisticsPro.Logic
{
public interface IWargamingClans
{
- Task GelClanInfoByAccount(long accountId, RealmAndLanguage queryParams);
+ Task GelClanInfoByAccount(long accountId, RealmAndLanguage queryParams);
}
}
\ No newline at end of file
diff --git a/WotBlitzStatisticsPro.Logic/Mappers/ClansProfile.cs b/WotBlitzStatisticsPro.Logic/Mappers/ClansProfile.cs
new file mode 100644
index 0000000..7602c25
--- /dev/null
+++ b/WotBlitzStatisticsPro.Logic/Mappers/ClansProfile.cs
@@ -0,0 +1,43 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using AutoMapper;
+using WotBlitzStatisticsPro.Common.Dictionaries;
+using WotBlitzStatisticsPro.Common.Model;
+using WotBlitzStatisticsPro.DataAccess.Model;
+using WotBlitzStatisticsPro.WgApiClient.Model;
+using WotBlitzStatisticsPro.Logic.Calculations;
+
+
+namespace WotBlitzStatisticsPro.Logic.Mappers
+{
+ public class ClansProfile: Profile
+ {
+ public ClansProfile()
+ {
+ CreateMap()
+ .ForMember(d => d.JoinedAt,
+ o => o.MapFrom(s => s.JoinedAt.HasValue ? s.JoinedAt.Value.ToDateTime() : new DateTime(1970, 1, 1)))
+ .ForMember(d => d.Role,
+ o => o.MapFrom((src, dest, destMember, context) =>
+ {
+ var dictionary = context.Items["roles"] as Dictionary;
+ if (string.IsNullOrEmpty(src.Role) || dictionary == null)
+ {
+ return string.Empty;
+ }
+
+ return dictionary[src.Role];
+ }))
+ ;
+
+ CreateMap()
+ .ForMember(d => d.CreatedAt,
+ o => o.MapFrom(s => s.CreatedAt.HasValue ? s.CreatedAt.Value.ToDateTime() : new DateTime(1970, 1, 1)))
+ .ForMember(d => d.UpdatedAt,
+ o => o.MapFrom(s => s.UpdatedAt.HasValue ? (DateTime?)s.UpdatedAt.Value.ToDateTime() : null))
+ ;
+;
+ }
+ }
+}
\ No newline at end of file
diff --git a/WotBlitzStatisticsPro.Logic/WargamingClans.cs b/WotBlitzStatisticsPro.Logic/WargamingClans.cs
index 479ec07..e794864 100644
--- a/WotBlitzStatisticsPro.Logic/WargamingClans.cs
+++ b/WotBlitzStatisticsPro.Logic/WargamingClans.cs
@@ -1,18 +1,48 @@
using System;
using System.Threading.Tasks;
+using AutoMapper;
using WotBlitzStatisticsPro.Common.Model;
+using WotBlitzStatisticsPro.DataAccess;
+using WotBlitzStatisticsPro.WgApiClient;
+using WotBlitzStatisticsPro.WgApiClient.Model;
namespace WotBlitzStatisticsPro.Logic
{
public class WargamingClans: IWargamingClans
{
- private const RealmType DefaultRealm = RealmType.Ru;
- private const RequestLanguage DefaultRequestLanguage = RequestLanguage.En;
+ private readonly IDictionariesDataAccessor _dictionariesDataAccessor;
+ private readonly IWargamingApiClient _wargamingApiClient;
+ private readonly IMapper _mapper;
- public Task GelClanInfoByAccount(long accountId, RealmAndLanguage queryParams)
+ public WargamingClans(
+ IDictionariesDataAccessor dictionariesDataAccessor,
+ IWargamingApiClient wargamingApiClient,
+ IMapper mapper)
{
- // ToDo: Make Wargaming request
- return Task.FromResult(new ClanInfoResponse {ClanId = 42, Name = "Fake clan"});
+ _dictionariesDataAccessor = dictionariesDataAccessor;
+ _wargamingApiClient = wargamingApiClient;
+ _mapper = mapper;
+ }
+
+ public async Task GelClanInfoByAccount(long accountId, RealmAndLanguage queryParams)
+ {
+ var clanRoles = await _dictionariesDataAccessor.GetClanRoles(queryParams.Language);
+ var accountClanInfo =
+ await _wargamingApiClient.GetPlayerClanInfo(accountId, queryParams.Realm, queryParams.Language);
+ if (accountClanInfo?.ClanId == null)
+ {
+ return null;
+ }
+
+ var result = _mapper.Map(accountClanInfo,
+ opt => opt.Items["roles"] = clanRoles);
+
+ var clanInfo = await _wargamingApiClient.GetClanInfo(accountClanInfo.ClanId.Value, queryParams.Realm,
+ queryParams.Language);
+
+ _mapper.Map(clanInfo, result);
+
+ return result;
}
}
}
\ No newline at end of file