feat: reorganized achevements queries and added client achievements request

This commit is contained in:
Mikhail Shabanov committed 2021-06-02 14:34:00 +02:00
1 parent 8da5bdbfa8
commit 11b8b15a2a
37 files changed
+1330 -171

No files matched your search

@@ -13,6 +13,8 @@ namespace WotBlitzStatisticsPro.Blazor.Tests.Services
{ {
public class GraphQlBackendServiceTests public class GraphQlBackendServiceTests
{ {
private const long CurrentAccountId = 123456789;
private Mock<IFindClansQuery> _findClanQueryMock; private Mock<IFindClansQuery> _findClanQueryMock;
private Mock<IFindPlayersQuery> _findPlayersQueryMock; private Mock<IFindPlayersQuery> _findPlayersQueryMock;
private Mock<IPlayerQuery> _playerQueryMock; private Mock<IPlayerQuery> _playerQueryMock;
@@ -30,6 +32,11 @@ namespace WotBlitzStatisticsPro.Blazor.Tests.Services
private List<IClientError> _findClansErrors; private List<IClientError> _findClansErrors;
private Mock<IOperationResult<IFindClansResult>> _findClansOperationResultMock; private Mock<IOperationResult<IFindClansResult>> _findClansOperationResultMock;
private Mock<IPlayerResult> _playerInfoResultMock;
private List<IClientError> _playerInfoErrors;
private Mock<IOperationResult<IPlayerResult>> _playerInfoOperationResultMock;
[SetUp] [SetUp]
public async Task Init() public async Task Init()
{ {
@@ -39,6 +46,7 @@ namespace WotBlitzStatisticsPro.Blazor.Tests.Services
await SetUpFindClans(); await SetUpFindClans();
await SetUpFindPlayers(); await SetUpFindPlayers();
await SetUpGetPlayer();
_generatedClient = _generatedClient =
new WotBlitzStatisticsProClient(_findClanQueryMock.Object, _findPlayersQueryMock.Object, _playerQueryMock.Object); new WotBlitzStatisticsProClient(_findClanQueryMock.Object, _findPlayersQueryMock.Object, _playerQueryMock.Object);
@@ -110,6 +118,39 @@ namespace WotBlitzStatisticsPro.Blazor.Tests.Services
_notificationServiceMock.Verify(n => n.ReportError(It.IsAny<string>(), It.IsAny<string>()), Times.Once); _notificationServiceMock.Verify(n => n.ReportError(It.IsAny<string>(), It.IsAny<string>()), Times.Once);
} }
[Test]
public async Task ShouldCallGetPlayerInfo()
{
var expectedRealm = RealmType.Ru;
_playerInfoOperationResultMock.SetupGet(r => r.Data).Returns(_playerInfoResultMock.Object);
var playerInfoResponse = await _service.GetPlayerInfo(CurrentAccountId, expectedRealm);
playerInfoResponse.Should().NotBeNull();
playerInfoResponse.accountInfo.Should().NotBeNull();
playerInfoResponse.achievementsBySection.Should().NotBeNull();
playerInfoResponse.achievementsBySection.Should().NotBeEmpty();
_playerQueryMock.Verify(q => q.ExecuteAsync(CurrentAccountId, expectedRealm, It.IsAny<RequestLanguage>(), It.IsAny<CancellationToken>()), Times.Once);
_notificationServiceMock.Verify(n => n.ReportError(It.IsAny<string>(), It.IsAny<string>()), Times.Never);
}
[Test]
public async Task ShouldNotifyAboutErrorIfGetPlayerInfoFails()
{
var expectedRealm = RealmType.Ru;
AddErrorToResult();
var playerInfoResponse = await _service.GetPlayerInfo(CurrentAccountId, expectedRealm);
playerInfoResponse.accountInfo.Should().BeNull();
playerInfoResponse.achievementsBySection.Should().BeNull();
_playerQueryMock.Verify(q => q.ExecuteAsync(CurrentAccountId, expectedRealm, It.IsAny<RequestLanguage>(), It.IsAny<CancellationToken>()), Times.Once);
_notificationServiceMock.Verify(n => n.ReportError(It.IsAny<string>(), It.IsAny<string>()), Times.Once);
}
private async Task SetUpFindPlayers() private async Task SetUpFindPlayers()
{ {
var players = await _mockDataService.FindPlayers("foo", RealmType.Ru); var players = await _mockDataService.FindPlayers("foo", RealmType.Ru);
@@ -146,6 +187,25 @@ namespace WotBlitzStatisticsPro.Blazor.Tests.Services
.ReturnsAsync(_findClansOperationResultMock.Object); .ReturnsAsync(_findClansOperationResultMock.Object);
} }
private async Task SetUpGetPlayer()
{
var result = await _mockDataService.GetPlayerInfo(CurrentAccountId, RealmType.Ru);
_playerInfoErrors = new List<IClientError>();
_playerInfoResultMock = new();
_playerInfoOperationResultMock = new();
_playerInfoResultMock.SetupGet(r => r.AccountInfo).Returns(result.accountInfo);
_playerInfoResultMock.SetupGet(r => r.AccountMedals).Returns(new Player_AccountMedals_AccountAchievementsResponse(CurrentAccountId, result.achievementsBySection));
_playerInfoOperationResultMock.SetupGet(r => r.Errors).Returns(_findClansErrors);
_playerQueryMock.Setup(q => q.ExecuteAsync(
It.IsAny<long>(),
It.IsAny<RealmType>(),
It.IsAny<RequestLanguage>(),
It.IsAny<CancellationToken>()))
.ReturnsAsync(_playerInfoOperationResultMock.Object);
}
private void AddErrorToResult() private void AddErrorToResult()
{ {
string graphQlErrorMessage = "{\"errors\": [{\"extensions\": {\"message\": \"GraphQL error message here\"}}]}"; string graphQlErrorMessage = "{\"errors\": [{\"extensions\": {\"message\": \"GraphQL error message here\"}}]}";
@@ -154,6 +214,7 @@ namespace WotBlitzStatisticsPro.Blazor.Tests.Services
error.SetupGet(e => e.Extensions).Returns(errorDetails); error.SetupGet(e => e.Extensions).Returns(errorDetails);
_findPlayersErrors.Add(error.Object); _findPlayersErrors.Add(error.Object);
_findClansErrors.Add(error.Object); _findClansErrors.Add(error.Object);
_playerInfoErrors.Add(error.Object);
} }
} }
} }
@@ -32,6 +32,7 @@ namespace Microsoft.Extensions.DependencyInjection
var clientFactory = global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::System.Net.Http.IHttpClientFactory>(parentServices); var clientFactory = global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::System.Net.Http.IHttpClientFactory>(parentServices);
return new global::StrawberryShake.Transport.Http.HttpConnection(() => clientFactory.CreateClient("WotBlitzStatisticsProClient")); return new global::StrawberryShake.Transport.Http.HttpConnection(() => clientFactory.CreateClient("WotBlitzStatisticsProClient"));
}); });
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::StrawberryShake.IEntityMapper<global::WotBlitzStatisticsPro.Blazor.GraphQl.State.AchievementEntity, global::WotBlitzStatisticsPro.Blazor.GraphQl.Player_AccountMedals_Sections_Medals_Achievement>, global::WotBlitzStatisticsPro.Blazor.GraphQl.State.Player_AccountMedals_Sections_Medals_AchievementFromAchievementEntityMapper>(services);
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::StrawberryShake.Serialization.ISerializer, global::WotBlitzStatisticsPro.Blazor.GraphQl.RealmTypeSerializer>(services); global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::StrawberryShake.Serialization.ISerializer, global::WotBlitzStatisticsPro.Blazor.GraphQl.RealmTypeSerializer>(services);
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::StrawberryShake.Serialization.ISerializer, global::WotBlitzStatisticsPro.Blazor.GraphQl.RequestLanguageSerializer>(services); global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::StrawberryShake.Serialization.ISerializer, global::WotBlitzStatisticsPro.Blazor.GraphQl.RequestLanguageSerializer>(services);
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::StrawberryShake.Serialization.ISerializer, global::WotBlitzStatisticsPro.Blazor.GraphQl.MarkOfMasterySerializer>(services); global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::StrawberryShake.Serialization.ISerializer, global::WotBlitzStatisticsPro.Blazor.GraphQl.MarkOfMasterySerializer>(services);
@@ -99,6 +99,33 @@ namespace WotBlitzStatisticsPro.Blazor.GraphQl
/// normalImage /// normalImage
/// } /// }
/// } /// }
/// accountMedals(accountId: $accountId, realmType: $realmType, requestLanguage: $requestLanguage) {
/// __typename
/// accountId
/// sections {
/// __typename
/// sectionId
/// order
/// name
/// medals {
/// __typename
/// id
/// name
/// medalType
/// condition
/// description
/// achievementValue
/// maxSeriesValue
/// image
/// imageBig
/// order
/// sectionId
/// ... on Achievement {
/// id
/// }
/// }
/// }
/// }
/// } /// }
/// </code> /// </code>
/// </summary> /// </summary>
@@ -10,5 +10,10 @@ namespace WotBlitzStatisticsPro.Blazor.GraphQl
/// Gathers all account information /// Gathers all account information
/// </summary> /// </summary>
public global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayer_AccountInfo AccountInfo { get; } public global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayer_AccountInfo AccountInfo { get; }
/// <summary>
/// Returns information about player's achievements
/// </summary>
public global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayer_AccountMedals AccountMedals { get; }
} }
} }
@@ -0,0 +1,22 @@
// <auto-generated/>
#nullable enable
namespace WotBlitzStatisticsPro.Blazor.GraphQl
{
/// <summary>
/// Represents information about player's achievements
/// </summary>
[global::System.CodeDom.Compiler.GeneratedCode("StrawberryShake", "11.2.2.0")]
public interface IPlayer_AccountMedals
{
/// <summary>
/// Player Id
/// </summary>
public global::System.Int64 AccountId { get; }
/// <summary>
/// Player Achievements by sections
/// </summary>
public global::System.Collections.Generic.IReadOnlyList<global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayer_AccountMedals_Sections>? Sections { get; }
}
}
@@ -0,0 +1,13 @@
// <auto-generated/>
#nullable enable
namespace WotBlitzStatisticsPro.Blazor.GraphQl
{
/// <summary>
/// Represents information about player's achievements
/// </summary>
[global::System.CodeDom.Compiler.GeneratedCode("StrawberryShake", "11.2.2.0")]
public interface IPlayer_AccountMedals_AccountAchievementsResponse : IPlayer_AccountMedals
{
}
}
@@ -0,0 +1,32 @@
// <auto-generated/>
#nullable enable
namespace WotBlitzStatisticsPro.Blazor.GraphQl
{
/// <summary>
/// Represents achievement section info and it's achievements list
/// </summary>
[global::System.CodeDom.Compiler.GeneratedCode("StrawberryShake", "11.2.2.0")]
public interface IPlayer_AccountMedals_Sections
{
/// <summary>
/// Section Identifier
/// </summary>
public global::System.String SectionId { get; }
/// <summary>
/// Section order
/// </summary>
public global::System.Int32 Order { get; }
/// <summary>
/// Section Name
/// </summary>
public global::System.String Name { get; }
/// <summary>
/// Achievements in the section
/// </summary>
public global::System.Collections.Generic.IReadOnlyList<global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayer_AccountMedals_Sections_Medals>? Medals { get; }
}
}
@@ -0,0 +1,13 @@
// <auto-generated/>
#nullable enable
namespace WotBlitzStatisticsPro.Blazor.GraphQl
{
/// <summary>
/// Represents achievement section info and it's achievements list
/// </summary>
[global::System.CodeDom.Compiler.GeneratedCode("StrawberryShake", "11.2.2.0")]
public interface IPlayer_AccountMedals_Sections_AchievementSection : IPlayer_AccountMedals_Sections
{
}
}
@@ -0,0 +1,67 @@
// <auto-generated/>
#nullable enable
namespace WotBlitzStatisticsPro.Blazor.GraphQl
{
/// <summary>
/// Player's achievement information
/// </summary>
[global::System.CodeDom.Compiler.GeneratedCode("StrawberryShake", "11.2.2.0")]
public interface IPlayer_AccountMedals_Sections_Medals
{
/// <summary>
/// Achievement Id
/// </summary>
public global::System.String Id { get; }
/// <summary>
/// Achievement name
/// </summary>
public global::System.String? Name { get; }
/// <summary>
/// Achievement type
/// </summary>
public global::System.String? MedalType { get; }
/// <summary>
/// Achievement condition
/// </summary>
public global::System.String? Condition { get; }
/// <summary>
/// Achievement description
/// </summary>
public global::System.String? Description { get; }
/// <summary>
/// Achievement value
/// </summary>
public global::System.Int32 AchievementValue { get; }
/// <summary>
/// Achievement max series value
/// </summary>
public global::System.Int32? MaxSeriesValue { get; }
/// <summary>
/// Achievement normal sized image
/// </summary>
public global::System.String? Image { get; }
/// <summary>
/// Achievement big image
/// </summary>
public global::System.String? ImageBig { get; }
/// <summary>
/// Order
/// </summary>
public global::System.Int64? Order { get; }
/// <summary>
/// Section Id
/// </summary>
public global::System.String SectionId { get; }
}
}
@@ -0,0 +1,13 @@
// <auto-generated/>
#nullable enable
namespace WotBlitzStatisticsPro.Blazor.GraphQl
{
/// <summary>
/// Player's achievement information
/// </summary>
[global::System.CodeDom.Compiler.GeneratedCode("StrawberryShake", "11.2.2.0")]
public interface IPlayer_AccountMedals_Sections_Medals_Achievement : IPlayer_AccountMedals_Sections_Medals
{
}
}
@@ -99,6 +99,33 @@ namespace WotBlitzStatisticsPro.Blazor.GraphQl
/// normalImage /// normalImage
/// } /// }
/// } /// }
/// accountMedals(accountId: $accountId, realmType: $realmType, requestLanguage: $requestLanguage) {
/// __typename
/// accountId
/// sections {
/// __typename
/// sectionId
/// order
/// name
/// medals {
/// __typename
/// id
/// name
/// medalType
/// condition
/// description
/// achievementValue
/// maxSeriesValue
/// image
/// imageBig
/// order
/// sectionId
/// ... on Achievement {
/// id
/// }
/// }
/// }
/// }
/// } /// }
/// </code> /// </code>
/// </summary> /// </summary>
@@ -99,6 +99,33 @@ namespace WotBlitzStatisticsPro.Blazor.GraphQl
/// normalImage /// normalImage
/// } /// }
/// } /// }
/// accountMedals(accountId: $accountId, realmType: $realmType, requestLanguage: $requestLanguage) {
/// __typename
/// accountId
/// sections {
/// __typename
/// sectionId
/// order
/// name
/// medals {
/// __typename
/// id
/// name
/// medalType
/// condition
/// description
/// achievementValue
/// maxSeriesValue
/// image
/// imageBig
/// order
/// sectionId
/// ... on Achievement {
/// id
/// }
/// }
/// }
/// }
/// } /// }
/// </code> /// </code>
/// </summary> /// </summary>
@@ -111,8 +138,8 @@ namespace WotBlitzStatisticsPro.Blazor.GraphQl
public static PlayerQueryDocument Instance { get; } = new PlayerQueryDocument(); public static PlayerQueryDocument Instance { get; } = new PlayerQueryDocument();
public global::StrawberryShake.OperationKind Kind => global::StrawberryShake.OperationKind.Query; public global::StrawberryShake.OperationKind Kind => global::StrawberryShake.OperationKind.Query;
public global::System.ReadOnlySpan<global::System.Byte> Body => new global::System.Byte[]{0x71, 0x75, 0x65, 0x72, 0x79, 0x20, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x28, 0x24, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x3a, 0x20, 0x4c, 0x6f, 0x6e, 0x67, 0x21, 0x2c, 0x20, 0x24, 0x72, 0x65, 0x61, 0x6c, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x52, 0x65, 0x61, 0x6c, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x21, 0x2c, 0x20, 0x24, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3a, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x21, 0x29, 0x20, 0x7b, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x3a, 0x20, 0x24, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x2c, 0x20, 0x72, 0x65, 0x61, 0x6c, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x24, 0x72, 0x65, 0x61, 0x6c, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x2c, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3a, 0x20, 0x24, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x29, 0x20, 0x7b, 0x20, 0x5f, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x61, 0x78, 0x46, 0x72, 0x61, 0x67, 0x73, 0x54, 0x61, 0x6e, 0x6b, 0x49, 0x64, 0x20, 0x6d, 0x61, 0x78, 0x58, 0x70, 0x54, 0x61, 0x6e, 0x6b, 0x49, 0x64, 0x20, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x73, 0x20, 0x63, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x20, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x65, 0x61, 0x6c, 0x74, 0x20, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x43, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x20, 0x66, 0x72, 0x61, 0x67, 0x73, 0x20, 0x66, 0x72, 0x61, 0x67, 0x73, 0x38, 0x50, 0x20, 0x68, 0x69, 0x74, 0x73, 0x20, 0x6c, 0x6f, 0x73, 0x73, 0x65, 0x73, 0x20, 0x6d, 0x61, 0x78, 0x46, 0x72, 0x61, 0x67, 0x73, 0x20, 0x6d, 0x61, 0x78, 0x58, 0x70, 0x20, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x20, 0x73, 0x70, 0x6f, 0x74, 0x74, 0x65, 0x64, 0x20, 0x73, 0x75, 0x72, 0x76, 0x69, 0x76, 0x65, 0x64, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x73, 0x20, 0x77, 0x69, 0x6e, 0x41, 0x6e, 0x64, 0x53, 0x75, 0x72, 0x76, 0x69, 0x76, 0x65, 0x64, 0x20, 0x77, 0x69, 0x6e, 0x73, 0x20, 0x78, 0x70, 0x20, 0x77, 0x6e, 0x37, 0x20, 0x77, 0x69, 0x6e, 0x52, 0x61, 0x74, 0x65, 0x20, 0x61, 0x76, 0x67, 0x44, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x20, 0x61, 0x76, 0x67, 0x58, 0x70, 0x20, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x65, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x75, 0x72, 0x76, 0x69, 0x76, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x20, 0x61, 0x76, 0x67, 0x54, 0x69, 0x65, 0x72, 0x20, 0x63, 0x6c, 0x61, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x7b, 0x20, 0x5f, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x63, 0x6c, 0x61, 0x6e, 0x49, 0x64, 0x20, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x74, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x74, 0x6d, 0x6c, 0x20, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x49, 0x64, 0x20, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x6d, 0x6f, 0x74, 0x74, 0x6f, 0x20, 0x74, 0x61, 0x67, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x20, 0x7d, 0x20, 0x74, 0x61, 0x6e, 0x6b, 0x73, 0x20, 0x7b, 0x20, 0x5f, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x61, 0x6e, 0x6b, 0x49, 0x64, 0x20, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x4c, 0x69, 0x66, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x4f, 0x66, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x79, 0x20, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x73, 0x20, 0x63, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x20, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x65, 0x61, 0x6c, 0x74, 0x20, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x43, 0x61, 0x70,Line truncated public global::System.ReadOnlySpan<global::System.Byte> Body => new global::System.Byte[]{0x71, 0x75, 0x65, 0x72, 0x79, 0x20, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x28, 0x24, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x3a, 0x20, 0x4c, 0x6f, 0x6e, 0x67, 0x21, 0x2c, 0x20, 0x24, 0x72, 0x65, 0x61, 0x6c, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x52, 0x65, 0x61, 0x6c, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x21, 0x2c, 0x20, 0x24, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3a, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x21, 0x29, 0x20, 0x7b, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x28, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x3a, 0x20, 0x24, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x2c, 0x20, 0x72, 0x65, 0x61, 0x6c, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x24, 0x72, 0x65, 0x61, 0x6c, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x2c, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3a, 0x20, 0x24, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x29, 0x20, 0x7b, 0x20, 0x5f, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x61, 0x78, 0x46, 0x72, 0x61, 0x67, 0x73, 0x54, 0x61, 0x6e, 0x6b, 0x49, 0x64, 0x20, 0x6d, 0x61, 0x78, 0x58, 0x70, 0x54, 0x61, 0x6e, 0x6b, 0x49, 0x64, 0x20, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x73, 0x20, 0x63, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x20, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x65, 0x61, 0x6c, 0x74, 0x20, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x43, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x20, 0x66, 0x72, 0x61, 0x67, 0x73, 0x20, 0x66, 0x72, 0x61, 0x67, 0x73, 0x38, 0x50, 0x20, 0x68, 0x69, 0x74, 0x73, 0x20, 0x6c, 0x6f, 0x73, 0x73, 0x65, 0x73, 0x20, 0x6d, 0x61, 0x78, 0x46, 0x72, 0x61, 0x67, 0x73, 0x20, 0x6d, 0x61, 0x78, 0x58, 0x70, 0x20, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x20, 0x73, 0x70, 0x6f, 0x74, 0x74, 0x65, 0x64, 0x20, 0x73, 0x75, 0x72, 0x76, 0x69, 0x76, 0x65, 0x64, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x73, 0x20, 0x77, 0x69, 0x6e, 0x41, 0x6e, 0x64, 0x53, 0x75, 0x72, 0x76, 0x69, 0x76, 0x65, 0x64, 0x20, 0x77, 0x69, 0x6e, 0x73, 0x20, 0x78, 0x70, 0x20, 0x77, 0x6e, 0x37, 0x20, 0x77, 0x69, 0x6e, 0x52, 0x61, 0x74, 0x65, 0x20, 0x61, 0x76, 0x67, 0x44, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x20, 0x61, 0x76, 0x67, 0x58, 0x70, 0x20, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x65, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x75, 0x72, 0x76, 0x69, 0x76, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x20, 0x61, 0x76, 0x67, 0x54, 0x69, 0x65, 0x72, 0x20, 0x63, 0x6c, 0x61, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x7b, 0x20, 0x5f, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x63, 0x6c, 0x61, 0x6e, 0x49, 0x64, 0x20, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x74, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x74, 0x6d, 0x6c, 0x20, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x49, 0x64, 0x20, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x6d, 0x6f, 0x74, 0x74, 0x6f, 0x20, 0x74, 0x61, 0x67, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x20, 0x7d, 0x20, 0x74, 0x61, 0x6e, 0x6b, 0x73, 0x20, 0x7b, 0x20, 0x5f, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x61, 0x6e, 0x6b, 0x49, 0x64, 0x20, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x4c, 0x69, 0x66, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x4f, 0x66, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x79, 0x20, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x73, 0x20, 0x63, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x20, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x65, 0x61, 0x6c, 0x74, 0x20, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x43, 0x61, 0x70,Line truncated
public global::StrawberryShake.DocumentHash Hash { get; } = new global::StrawberryShake.DocumentHash("md5Hash", "15d5e03ef055dc951c047827ff49084b"); public global::StrawberryShake.DocumentHash Hash { get; } = new global::StrawberryShake.DocumentHash("md5Hash", "032972243d83d3556ee9d9b34cd35f25");
public override global::System.String ToString() public override global::System.String ToString()
{ {
#if NETSTANDARD2_0 #if NETSTANDARD2_0
@@ -6,9 +6,10 @@ namespace WotBlitzStatisticsPro.Blazor.GraphQl
[global::System.CodeDom.Compiler.GeneratedCode("StrawberryShake", "11.2.2.0")] [global::System.CodeDom.Compiler.GeneratedCode("StrawberryShake", "11.2.2.0")]
public partial class PlayerResult : global::System.IEquatable<PlayerResult>, IPlayerResult public partial class PlayerResult : global::System.IEquatable<PlayerResult>, IPlayerResult
{ {
public PlayerResult(global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayer_AccountInfo accountInfo) public PlayerResult(global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayer_AccountInfo accountInfo, global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayer_AccountMedals accountMedals)
{ {
AccountInfo = accountInfo; AccountInfo = accountInfo;
AccountMedals = accountMedals;
} }
/// <summary> /// <summary>
@@ -16,6 +17,11 @@ namespace WotBlitzStatisticsPro.Blazor.GraphQl
/// </summary> /// </summary>
public global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayer_AccountInfo AccountInfo { get; } public global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayer_AccountInfo AccountInfo { get; }
/// <summary>
/// Returns information about player's achievements
/// </summary>
public global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayer_AccountMedals AccountMedals { get; }
public virtual global::System.Boolean Equals(PlayerResult? other) public virtual global::System.Boolean Equals(PlayerResult? other)
{ {
if (ReferenceEquals(null, other)) if (ReferenceEquals(null, other))
@@ -33,7 +39,7 @@ namespace WotBlitzStatisticsPro.Blazor.GraphQl
return false; return false;
} }
return (AccountInfo.Equals(other.AccountInfo)); return (AccountInfo.Equals(other.AccountInfo)) && AccountMedals.Equals(other.AccountMedals);
} }
public override global::System.Boolean Equals(global::System.Object? obj) public override global::System.Boolean Equals(global::System.Object? obj)
@@ -62,6 +68,7 @@ namespace WotBlitzStatisticsPro.Blazor.GraphQl
{ {
int hash = 5; int hash = 5;
hash ^= 397 * AccountInfo.GetHashCode(); hash ^= 397 * AccountInfo.GetHashCode();
hash ^= 397 * AccountMedals.GetHashCode();
return hash; return hash;
} }
} }
@@ -0,0 +1,86 @@
// <auto-generated/>
#nullable enable
namespace WotBlitzStatisticsPro.Blazor.GraphQl
{
/// <summary>
/// Represents information about player's achievements
/// </summary>
[global::System.CodeDom.Compiler.GeneratedCode("StrawberryShake", "11.2.2.0")]
public partial class Player_AccountMedals_AccountAchievementsResponse : global::System.IEquatable<Player_AccountMedals_AccountAchievementsResponse>, IPlayer_AccountMedals_AccountAchievementsResponse
{
public Player_AccountMedals_AccountAchievementsResponse(global::System.Int64 accountId, global::System.Collections.Generic.IReadOnlyList<global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayer_AccountMedals_Sections>? sections)
{
AccountId = accountId;
Sections = sections;
}
/// <summary>
/// Player Id
/// </summary>
public global::System.Int64 AccountId { get; }
/// <summary>
/// Player Achievements by sections
/// </summary>
public global::System.Collections.Generic.IReadOnlyList<global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayer_AccountMedals_Sections>? Sections { get; }
public virtual global::System.Boolean Equals(Player_AccountMedals_AccountAchievementsResponse? other)
{
if (ReferenceEquals(null, other))
{
return false;
}
if (ReferenceEquals(this, other))
{
return true;
}
if (other.GetType() != GetType())
{
return false;
}
return (AccountId == other.AccountId) && global::StrawberryShake.Helper.ComparisonHelper.SequenceEqual(Sections, other.Sections);
}
public override global::System.Boolean Equals(global::System.Object? obj)
{
if (ReferenceEquals(null, obj))
{
return false;
}
if (ReferenceEquals(this, obj))
{
return true;
}
if (obj.GetType() != GetType())
{
return false;
}
return Equals((Player_AccountMedals_AccountAchievementsResponse)obj);
}
public override global::System.Int32 GetHashCode()
{
unchecked
{
int hash = 5;
hash ^= 397 * AccountId.GetHashCode();
if (Sections != null)
{
foreach (var Sections_elm in Sections)
{
hash ^= 397 * Sections_elm.GetHashCode();
}
}
return hash;
}
}
}
}
@@ -0,0 +1,100 @@
// <auto-generated/>
#nullable enable
namespace WotBlitzStatisticsPro.Blazor.GraphQl
{
/// <summary>
/// Represents achievement section info and it's achievements list
/// </summary>
[global::System.CodeDom.Compiler.GeneratedCode("StrawberryShake", "11.2.2.0")]
public partial class Player_AccountMedals_Sections_AchievementSection : global::System.IEquatable<Player_AccountMedals_Sections_AchievementSection>, IPlayer_AccountMedals_Sections_AchievementSection
{
public Player_AccountMedals_Sections_AchievementSection(global::System.String sectionId, global::System.Int32 order, global::System.String name, global::System.Collections.Generic.IReadOnlyList<global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayer_AccountMedals_Sections_Medals>? medals)
{
SectionId = sectionId;
Order = order;
Name = name;
Medals = medals;
}
/// <summary>
/// Section Identifier
/// </summary>
public global::System.String SectionId { get; }
/// <summary>
/// Section order
/// </summary>
public global::System.Int32 Order { get; }
/// <summary>
/// Section Name
/// </summary>
public global::System.String Name { get; }
/// <summary>
/// Achievements in the section
/// </summary>
public global::System.Collections.Generic.IReadOnlyList<global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayer_AccountMedals_Sections_Medals>? Medals { get; }
public virtual global::System.Boolean Equals(Player_AccountMedals_Sections_AchievementSection? other)
{
if (ReferenceEquals(null, other))
{
return false;
}
if (ReferenceEquals(this, other))
{
return true;
}
if (other.GetType() != GetType())
{
return false;
}
return (SectionId.Equals(other.SectionId)) && Order == other.Order && Name.Equals(other.Name) && global::StrawberryShake.Helper.ComparisonHelper.SequenceEqual(Medals, other.Medals);
}
public override global::System.Boolean Equals(global::System.Object? obj)
{
if (ReferenceEquals(null, obj))
{
return false;
}
if (ReferenceEquals(this, obj))
{
return true;
}
if (obj.GetType() != GetType())
{
return false;
}
return Equals((Player_AccountMedals_Sections_AchievementSection)obj);
}
public override global::System.Int32 GetHashCode()
{
unchecked
{
int hash = 5;
hash ^= 397 * SectionId.GetHashCode();
hash ^= 397 * Order.GetHashCode();
hash ^= 397 * Name.GetHashCode();
if (Medals != null)
{
foreach (var Medals_elm in Medals)
{
hash ^= 397 * Medals_elm.GetHashCode();
}
}
return hash;
}
}
}
}
@@ -0,0 +1,174 @@
// <auto-generated/>
#nullable enable
namespace WotBlitzStatisticsPro.Blazor.GraphQl
{
/// <summary>
/// Player's achievement information
/// </summary>
[global::System.CodeDom.Compiler.GeneratedCode("StrawberryShake", "11.2.2.0")]
public partial class Player_AccountMedals_Sections_Medals_Achievement : global::System.IEquatable<Player_AccountMedals_Sections_Medals_Achievement>, IPlayer_AccountMedals_Sections_Medals_Achievement
{
public Player_AccountMedals_Sections_Medals_Achievement(global::System.String id, global::System.String? name, global::System.String? medalType, global::System.String? condition, global::System.String? description, global::System.Int32 achievementValue, global::System.Int32? maxSeriesValue, global::System.String? image, global::System.String? imageBig, global::System.Int64? order, global::System.String sectionId)
{
Id = id;
Name = name;
MedalType = medalType;
Condition = condition;
Description = description;
AchievementValue = achievementValue;
MaxSeriesValue = maxSeriesValue;
Image = image;
ImageBig = imageBig;
Order = order;
SectionId = sectionId;
}
/// <summary>
/// Achievement Id
/// </summary>
public global::System.String Id { get; }
/// <summary>
/// Achievement name
/// </summary>
public global::System.String? Name { get; }
/// <summary>
/// Achievement type
/// </summary>
public global::System.String? MedalType { get; }
/// <summary>
/// Achievement condition
/// </summary>
public global::System.String? Condition { get; }
/// <summary>
/// Achievement description
/// </summary>
public global::System.String? Description { get; }
/// <summary>
/// Achievement value
/// </summary>
public global::System.Int32 AchievementValue { get; }
/// <summary>
/// Achievement max series value
/// </summary>
public global::System.Int32? MaxSeriesValue { get; }
/// <summary>
/// Achievement normal sized image
/// </summary>
public global::System.String? Image { get; }
/// <summary>
/// Achievement big image
/// </summary>
public global::System.String? ImageBig { get; }
/// <summary>
/// Order
/// </summary>
public global::System.Int64? Order { get; }
/// <summary>
/// Section Id
/// </summary>
public global::System.String SectionId { get; }
public virtual global::System.Boolean Equals(Player_AccountMedals_Sections_Medals_Achievement? other)
{
if (ReferenceEquals(null, other))
{
return false;
}
if (ReferenceEquals(this, other))
{
return true;
}
if (other.GetType() != GetType())
{
return false;
}
return (Id.Equals(other.Id)) && ((Name is null && other.Name is null) || Name != null && Name.Equals(other.Name)) && ((MedalType is null && other.MedalType is null) || MedalType != null && MedalType.Equals(other.MedalType)) && ((Condition is null && other.Condition is null) || Condition != null && Condition.Equals(other.Condition)) && ((Description is null && other.Description is null) || Description != null && Description.Equals(other.Description)) && AchievementValue == other.AchievementValue && MaxSeriesValue == other.MaxSeriesValue && ((Image is null && other.Image is null) || Image != null && Image.Equals(other.Image)) && ((ImageBig is null && other.ImageBig is null) || ImageBig != null && ImageBig.Equals(other.ImageBig)) && Order == other.Order && SectionId.Equals(other.SectionId);
}
public override global::System.Boolean Equals(global::System.Object? obj)
{
if (ReferenceEquals(null, obj))
{
return false;
}
if (ReferenceEquals(this, obj))
{
return true;
}
if (obj.GetType() != GetType())
{
return false;
}
return Equals((Player_AccountMedals_Sections_Medals_Achievement)obj);
}
public override global::System.Int32 GetHashCode()
{
unchecked
{
int hash = 5;
hash ^= 397 * Id.GetHashCode();
if (Name != null)
{
hash ^= 397 * Name.GetHashCode();
}
if (MedalType != null)
{
hash ^= 397 * MedalType.GetHashCode();
}
if (Condition != null)
{
hash ^= 397 * Condition.GetHashCode();
}
if (Description != null)
{
hash ^= 397 * Description.GetHashCode();
}
hash ^= 397 * AchievementValue.GetHashCode();
if (MaxSeriesValue != null)
{
hash ^= 397 * MaxSeriesValue.GetHashCode();
}
if (Image != null)
{
hash ^= 397 * Image.GetHashCode();
}
if (ImageBig != null)
{
hash ^= 397 * ImageBig.GetHashCode();
}
if (Order != null)
{
hash ^= 397 * Order.GetHashCode();
}
hash ^= 397 * SectionId.GetHashCode();
return hash;
}
}
}
}
@@ -0,0 +1,25 @@
// <auto-generated/>
#nullable enable
namespace WotBlitzStatisticsPro.Blazor.GraphQl.State
{
///<summary>Represents information about player's achievements</summary>
[global::System.CodeDom.Compiler.GeneratedCode("StrawberryShake", "11.2.2.0")]
public partial class AccountAchievementsResponseData
{
public AccountAchievementsResponseData(global::System.String __typename, global::System.Int64? accountId = default !, global::System.Collections.Generic.IReadOnlyList<global::WotBlitzStatisticsPro.Blazor.GraphQl.State.AchievementSectionData>? sections = default !)
{
this.__typename = __typename ?? throw new global::System.ArgumentNullException(nameof(__typename));
AccountId = accountId;
Sections = sections;
}
public global::System.String __typename { get; }
///<summary>Player Id</summary>
public global::System.Int64? AccountId { get; }
///<summary>Player Achievements by sections</summary>
public global::System.Collections.Generic.IReadOnlyList<global::WotBlitzStatisticsPro.Blazor.GraphQl.State.AchievementSectionData>? Sections { get; }
}
}
@@ -0,0 +1,58 @@
// <auto-generated/>
#nullable enable
namespace WotBlitzStatisticsPro.Blazor.GraphQl.State
{
///<summary>Player's achievement information</summary>
[global::System.CodeDom.Compiler.GeneratedCode("StrawberryShake", "11.2.2.0")]
public partial class AchievementEntity
{
public AchievementEntity(global::System.String id = default !, global::System.String? name = default !, global::System.String? medalType = default !, global::System.String? condition = default !, global::System.String? description = default !, global::System.Int32 achievementValue = default !, global::System.Int32? maxSeriesValue = default !, global::System.String? image = default !, global::System.String? imageBig = default !, global::System.Int64? order = default !, global::System.String sectionId = default !)
{
Id = id;
Name = name;
MedalType = medalType;
Condition = condition;
Description = description;
AchievementValue = achievementValue;
MaxSeriesValue = maxSeriesValue;
Image = image;
ImageBig = imageBig;
Order = order;
SectionId = sectionId;
}
///<summary>Achievement Id</summary>
public global::System.String Id { get; }
///<summary>Achievement name</summary>
public global::System.String? Name { get; }
///<summary>Achievement type</summary>
public global::System.String? MedalType { get; }
///<summary>Achievement condition</summary>
public global::System.String? Condition { get; }
///<summary>Achievement description</summary>
public global::System.String? Description { get; }
///<summary>Achievement value</summary>
public global::System.Int32 AchievementValue { get; }
///<summary>Achievement max series value</summary>
public global::System.Int32? MaxSeriesValue { get; }
///<summary>Achievement normal sized image</summary>
public global::System.String? Image { get; }
///<summary>Achievement big image</summary>
public global::System.String? ImageBig { get; }
///<summary>Order</summary>
public global::System.Int64? Order { get; }
///<summary>Section Id</summary>
public global::System.String SectionId { get; }
}
}
@@ -0,0 +1,33 @@
// <auto-generated/>
#nullable enable
namespace WotBlitzStatisticsPro.Blazor.GraphQl.State
{
///<summary>Represents achievement section info and it's achievements list</summary>
[global::System.CodeDom.Compiler.GeneratedCode("StrawberryShake", "11.2.2.0")]
public partial class AchievementSectionData
{
public AchievementSectionData(global::System.String __typename, global::System.String? sectionId = default !, global::System.Int32? order = default !, global::System.String? name = default !, global::System.Collections.Generic.IReadOnlyList<global::StrawberryShake.EntityId>? medals = default !)
{
this.__typename = __typename ?? throw new global::System.ArgumentNullException(nameof(__typename));
SectionId = sectionId;
Order = order;
Name = name;
Medals = medals;
}
public global::System.String __typename { get; }
///<summary>Section Identifier</summary>
public global::System.String? SectionId { get; }
///<summary>Section order</summary>
public global::System.Int32? Order { get; }
///<summary>Section Name</summary>
public global::System.String? Name { get; }
///<summary>Achievements in the section</summary>
public global::System.Collections.Generic.IReadOnlyList<global::StrawberryShake.EntityId>? Medals { get; }
}
}
@@ -74,11 +74,13 @@ namespace WotBlitzStatisticsPro.Blazor.GraphQl.State
{ {
var entityIds = new global::System.Collections.Generic.HashSet<global::StrawberryShake.EntityId>(); var entityIds = new global::System.Collections.Generic.HashSet<global::StrawberryShake.EntityId>();
global::StrawberryShake.IEntityStoreSnapshot snapshot = default !; global::StrawberryShake.IEntityStoreSnapshot snapshot = default !;
global::WotBlitzStatisticsPro.Blazor.GraphQl.State.AccountAchievementsResponseData accountMedalsId = default !;
_entityStore.Update(session => _entityStore.Update(session =>
{ {
accountMedalsId = DeserializeNonNullableIPlayer_AccountMedals(session, global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "accountMedals"), entityIds);
snapshot = session.CurrentSnapshot; snapshot = session.CurrentSnapshot;
}); });
var resultInfo = new PlayerResultInfo(DeserializeNonNullableIPlayer_AccountInfo(global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "accountInfo")), entityIds, snapshot.Version); var resultInfo = new PlayerResultInfo(DeserializeNonNullableIPlayer_AccountInfo(global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "accountInfo")), accountMedalsId, entityIds, snapshot.Version);
return (_resultDataFactory.Create(resultInfo), resultInfo); return (_resultDataFactory.Create(resultInfo), resultInfo);
} }
@@ -255,5 +257,105 @@ namespace WotBlitzStatisticsPro.Blazor.GraphQl.State
return _booleanParser.Parse(obj.Value.GetBoolean()!); return _booleanParser.Parse(obj.Value.GetBoolean()!);
} }
private global::WotBlitzStatisticsPro.Blazor.GraphQl.State.AccountAchievementsResponseData DeserializeNonNullableIPlayer_AccountMedals(global::StrawberryShake.IEntityStoreUpdateSession session, global::System.Text.Json.JsonElement? obj, global::System.Collections.Generic.ISet<global::StrawberryShake.EntityId> entityIds)
{
if (!obj.HasValue)
{
throw new global::System.ArgumentNullException();
}
var typename = obj.Value.GetProperty("__typename").GetString();
if (typename?.Equals("AccountAchievementsResponse", global::System.StringComparison.Ordinal) ?? false)
{
return new global::WotBlitzStatisticsPro.Blazor.GraphQl.State.AccountAchievementsResponseData(typename, accountId: DeserializeNonNullableInt64(global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "accountId")), sections: DeserializeIPlayer_AccountMedals_SectionsNonNullableArray(session, global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "sections"), entityIds));
}
throw new global::System.NotSupportedException();
}
private global::System.Collections.Generic.IReadOnlyList<global::WotBlitzStatisticsPro.Blazor.GraphQl.State.AchievementSectionData>? DeserializeIPlayer_AccountMedals_SectionsNonNullableArray(global::StrawberryShake.IEntityStoreUpdateSession session, global::System.Text.Json.JsonElement? obj, global::System.Collections.Generic.ISet<global::StrawberryShake.EntityId> entityIds)
{
if (!obj.HasValue)
{
return null;
}
var achievementSections = new global::System.Collections.Generic.List<global::WotBlitzStatisticsPro.Blazor.GraphQl.State.AchievementSectionData>();
foreach (global::System.Text.Json.JsonElement child in obj.Value.EnumerateArray())
{
achievementSections.Add(DeserializeNonNullableIPlayer_AccountMedals_Sections(session, child, entityIds));
}
return achievementSections;
}
private global::WotBlitzStatisticsPro.Blazor.GraphQl.State.AchievementSectionData DeserializeNonNullableIPlayer_AccountMedals_Sections(global::StrawberryShake.IEntityStoreUpdateSession session, global::System.Text.Json.JsonElement? obj, global::System.Collections.Generic.ISet<global::StrawberryShake.EntityId> entityIds)
{
if (!obj.HasValue)
{
throw new global::System.ArgumentNullException();
}
var typename = obj.Value.GetProperty("__typename").GetString();
if (typename?.Equals("AchievementSection", global::System.StringComparison.Ordinal) ?? false)
{
return new global::WotBlitzStatisticsPro.Blazor.GraphQl.State.AchievementSectionData(typename, sectionId: DeserializeNonNullableString(global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "sectionId")), order: DeserializeNonNullableInt32(global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "order")), name: DeserializeNonNullableString(global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "name")), medals: UpdateIPlayer_AccountMedals_Sections_MedalsEntityNonNullableArray(session, global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "medals"), entityIds));
}
throw new global::System.NotSupportedException();
}
private global::System.Collections.Generic.IReadOnlyList<global::StrawberryShake.EntityId>? UpdateIPlayer_AccountMedals_Sections_MedalsEntityNonNullableArray(global::StrawberryShake.IEntityStoreUpdateSession session, global::System.Text.Json.JsonElement? obj, global::System.Collections.Generic.ISet<global::StrawberryShake.EntityId> entityIds)
{
if (!obj.HasValue)
{
return null;
}
var achievements = new global::System.Collections.Generic.List<global::StrawberryShake.EntityId>();
foreach (global::System.Text.Json.JsonElement child in obj.Value.EnumerateArray())
{
achievements.Add(UpdateNonNullableIPlayer_AccountMedals_Sections_MedalsEntity(session, child, entityIds));
}
return achievements;
}
private global::StrawberryShake.EntityId UpdateNonNullableIPlayer_AccountMedals_Sections_MedalsEntity(global::StrawberryShake.IEntityStoreUpdateSession session, global::System.Text.Json.JsonElement? obj, global::System.Collections.Generic.ISet<global::StrawberryShake.EntityId> entityIds)
{
if (!obj.HasValue)
{
throw new global::System.ArgumentNullException();
}
global::StrawberryShake.EntityId entityId = _idSerializer.Parse(obj.Value);
entityIds.Add(entityId);
if (entityId.Name.Equals("Achievement", global::System.StringComparison.Ordinal))
{
if (session.CurrentSnapshot.TryGetEntity(entityId, out global::WotBlitzStatisticsPro.Blazor.GraphQl.State.AchievementEntity? entity))
{
session.SetEntity(entityId, new global::WotBlitzStatisticsPro.Blazor.GraphQl.State.AchievementEntity(DeserializeNonNullableString(global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "id")), DeserializeString(global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "name")), DeserializeString(global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "medalType")), DeserializeString(global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "condition")), DeserializeString(global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "description")), DeserializeNonNullableInt32(global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "achievementValue")), DeserializeInt32(global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "maxSeriesValue")), DeserializeString(global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "image")), DeserializeString(global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "imageBig")), DeserializeInt64(global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "order")), DeserializeNonNullableString(global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "sectionId"))));
}
else
{
session.SetEntity(entityId, new global::WotBlitzStatisticsPro.Blazor.GraphQl.State.AchievementEntity(DeserializeNonNullableString(global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "id")), DeserializeString(global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "name")), DeserializeString(global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "medalType")), DeserializeString(global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "condition")), DeserializeString(global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "description")), DeserializeNonNullableInt32(global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "achievementValue")), DeserializeInt32(global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "maxSeriesValue")), DeserializeString(global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "image")), DeserializeString(global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "imageBig")), DeserializeInt64(global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "order")), DeserializeNonNullableString(global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "sectionId"))));
}
return entityId;
}
throw new global::System.NotSupportedException();
}
private global::System.Int32? DeserializeInt32(global::System.Text.Json.JsonElement? obj)
{
if (!obj.HasValue)
{
return null;
}
return _intParser.Parse(obj.Value.GetInt32()!);
}
} }
} }
@@ -7,9 +7,11 @@ namespace WotBlitzStatisticsPro.Blazor.GraphQl.State
public partial class PlayerResultFactory : global::StrawberryShake.IOperationResultDataFactory<global::WotBlitzStatisticsPro.Blazor.GraphQl.PlayerResult> public partial class PlayerResultFactory : global::StrawberryShake.IOperationResultDataFactory<global::WotBlitzStatisticsPro.Blazor.GraphQl.PlayerResult>
{ {
private readonly global::StrawberryShake.IEntityStore _entityStore; private readonly global::StrawberryShake.IEntityStore _entityStore;
public PlayerResultFactory(global::StrawberryShake.IEntityStore entityStore) private readonly global::StrawberryShake.IEntityMapper<global::WotBlitzStatisticsPro.Blazor.GraphQl.State.AchievementEntity, Player_AccountMedals_Sections_Medals_Achievement> _player_AccountMedals_Sections_Medals_AchievementFromAchievementEntityMapper;
public PlayerResultFactory(global::StrawberryShake.IEntityStore entityStore, global::StrawberryShake.IEntityMapper<global::WotBlitzStatisticsPro.Blazor.GraphQl.State.AchievementEntity, Player_AccountMedals_Sections_Medals_Achievement> player_AccountMedals_Sections_Medals_AchievementFromAchievementEntityMapper)
{ {
_entityStore = entityStore ?? throw new global::System.ArgumentNullException(nameof(entityStore)); _entityStore = entityStore ?? throw new global::System.ArgumentNullException(nameof(entityStore));
_player_AccountMedals_Sections_Medals_AchievementFromAchievementEntityMapper = player_AccountMedals_Sections_Medals_AchievementFromAchievementEntityMapper ?? throw new global::System.ArgumentNullException(nameof(player_AccountMedals_Sections_Medals_AchievementFromAchievementEntityMapper));
} }
global::System.Type global::StrawberryShake.IOperationResultDataFactory.ResultType => typeof(global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayerResult); global::System.Type global::StrawberryShake.IOperationResultDataFactory.ResultType => typeof(global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayerResult);
@@ -22,7 +24,7 @@ namespace WotBlitzStatisticsPro.Blazor.GraphQl.State
if (dataInfo is PlayerResultInfo info) if (dataInfo is PlayerResultInfo info)
{ {
return new PlayerResult(MapNonNullableIPlayer_AccountInfo(info.AccountInfo, snapshot)); return new PlayerResult(MapNonNullableIPlayer_AccountInfo(info.AccountInfo, snapshot), MapNonNullableIPlayer_AccountMedals(info.AccountMedals, snapshot));
} }
throw new global::System.ArgumentException("PlayerResultInfo expected."); throw new global::System.ArgumentException("PlayerResultInfo expected.");
@@ -94,6 +96,78 @@ namespace WotBlitzStatisticsPro.Blazor.GraphQl.State
return returnValue; return returnValue;
} }
private global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayer_AccountMedals MapNonNullableIPlayer_AccountMedals(global::WotBlitzStatisticsPro.Blazor.GraphQl.State.AccountAchievementsResponseData data, global::StrawberryShake.IEntityStoreSnapshot snapshot)
{
IPlayer_AccountMedals returnValue = default !;
if (data.__typename.Equals("AccountAchievementsResponse", global::System.StringComparison.Ordinal))
{
returnValue = new Player_AccountMedals_AccountAchievementsResponse(data.AccountId ?? throw new global::System.ArgumentNullException(), MapIPlayer_AccountMedals_SectionsNonNullableArray(data.Sections, snapshot));
}
else
{
throw new global::System.NotSupportedException();
}
return returnValue;
}
private global::System.Collections.Generic.IReadOnlyList<global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayer_AccountMedals_Sections>? MapIPlayer_AccountMedals_SectionsNonNullableArray(global::System.Collections.Generic.IReadOnlyList<global::WotBlitzStatisticsPro.Blazor.GraphQl.State.AchievementSectionData>? list, global::StrawberryShake.IEntityStoreSnapshot snapshot)
{
if (list is null)
{
return null;
}
var achievementSections = new global::System.Collections.Generic.List<global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayer_AccountMedals_Sections>();
foreach (global::WotBlitzStatisticsPro.Blazor.GraphQl.State.AchievementSectionData child in list)
{
achievementSections.Add(MapNonNullableIPlayer_AccountMedals_Sections(child, snapshot));
}
return achievementSections;
}
private global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayer_AccountMedals_Sections MapNonNullableIPlayer_AccountMedals_Sections(global::WotBlitzStatisticsPro.Blazor.GraphQl.State.AchievementSectionData data, global::StrawberryShake.IEntityStoreSnapshot snapshot)
{
IPlayer_AccountMedals_Sections returnValue = default !;
if (data.__typename.Equals("AchievementSection", global::System.StringComparison.Ordinal))
{
returnValue = new Player_AccountMedals_Sections_AchievementSection(data.SectionId ?? throw new global::System.ArgumentNullException(), data.Order ?? throw new global::System.ArgumentNullException(), data.Name ?? throw new global::System.ArgumentNullException(), MapIPlayer_AccountMedals_Sections_MedalsNonNullableArray(data.Medals, snapshot));
}
else
{
throw new global::System.NotSupportedException();
}
return returnValue;
}
private global::System.Collections.Generic.IReadOnlyList<global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayer_AccountMedals_Sections_Medals>? MapIPlayer_AccountMedals_Sections_MedalsNonNullableArray(global::System.Collections.Generic.IReadOnlyList<global::StrawberryShake.EntityId>? list, global::StrawberryShake.IEntityStoreSnapshot snapshot)
{
if (list is null)
{
return null;
}
var achievements = new global::System.Collections.Generic.List<global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayer_AccountMedals_Sections_Medals>();
foreach (global::StrawberryShake.EntityId child in list)
{
achievements.Add(MapNonNullableIPlayer_AccountMedals_Sections_Medals(child, snapshot));
}
return achievements;
}
private global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayer_AccountMedals_Sections_Medals MapNonNullableIPlayer_AccountMedals_Sections_Medals(global::StrawberryShake.EntityId entityId, global::StrawberryShake.IEntityStoreSnapshot snapshot)
{
if (entityId.Name.Equals("Achievement", global::System.StringComparison.Ordinal))
{
return _player_AccountMedals_Sections_Medals_AchievementFromAchievementEntityMapper.Map(snapshot.GetEntity<global::WotBlitzStatisticsPro.Blazor.GraphQl.State.AchievementEntity>(entityId) ?? throw new global::StrawberryShake.GraphQLClientException());
}
throw new global::System.NotSupportedException();
}
global::System.Object global::StrawberryShake.IOperationResultDataFactory.Create(global::StrawberryShake.IOperationResultDataInfo dataInfo, global::StrawberryShake.IEntityStoreSnapshot? snapshot) global::System.Object global::StrawberryShake.IOperationResultDataFactory.Create(global::StrawberryShake.IOperationResultDataInfo dataInfo, global::StrawberryShake.IEntityStoreSnapshot? snapshot)
{ {
return Create(dataInfo, snapshot); return Create(dataInfo, snapshot);
@@ -8,9 +8,10 @@ namespace WotBlitzStatisticsPro.Blazor.GraphQl.State
{ {
private readonly global::System.Collections.Generic.IReadOnlyCollection<global::StrawberryShake.EntityId> _entityIds; private readonly global::System.Collections.Generic.IReadOnlyCollection<global::StrawberryShake.EntityId> _entityIds;
private readonly global::System.UInt64 _version; private readonly global::System.UInt64 _version;
public PlayerResultInfo(global::WotBlitzStatisticsPro.Blazor.GraphQl.State.AccountInfoResponseData accountInfo, global::System.Collections.Generic.IReadOnlyCollection<global::StrawberryShake.EntityId> entityIds, global::System.UInt64 version) public PlayerResultInfo(global::WotBlitzStatisticsPro.Blazor.GraphQl.State.AccountInfoResponseData accountInfo, global::WotBlitzStatisticsPro.Blazor.GraphQl.State.AccountAchievementsResponseData accountMedals, global::System.Collections.Generic.IReadOnlyCollection<global::StrawberryShake.EntityId> entityIds, global::System.UInt64 version)
{ {
AccountInfo = accountInfo; AccountInfo = accountInfo;
AccountMedals = accountMedals;
_entityIds = entityIds ?? throw new global::System.ArgumentNullException(nameof(entityIds)); _entityIds = entityIds ?? throw new global::System.ArgumentNullException(nameof(entityIds));
_version = version; _version = version;
} }
@@ -20,11 +21,16 @@ namespace WotBlitzStatisticsPro.Blazor.GraphQl.State
/// </summary> /// </summary>
public global::WotBlitzStatisticsPro.Blazor.GraphQl.State.AccountInfoResponseData AccountInfo { get; } public global::WotBlitzStatisticsPro.Blazor.GraphQl.State.AccountInfoResponseData AccountInfo { get; }
/// <summary>
/// Returns information about player's achievements
/// </summary>
public global::WotBlitzStatisticsPro.Blazor.GraphQl.State.AccountAchievementsResponseData AccountMedals { get; }
public global::System.Collections.Generic.IReadOnlyCollection<global::StrawberryShake.EntityId> EntityIds => _entityIds; public global::System.Collections.Generic.IReadOnlyCollection<global::StrawberryShake.EntityId> EntityIds => _entityIds;
public global::System.UInt64 Version => _version; public global::System.UInt64 Version => _version;
public global::StrawberryShake.IOperationResultDataInfo WithVersion(global::System.UInt64 version) public global::StrawberryShake.IOperationResultDataInfo WithVersion(global::System.UInt64 version)
{ {
return new PlayerResultInfo(AccountInfo, _entityIds, version); return new PlayerResultInfo(AccountInfo, AccountMedals, _entityIds, version);
} }
} }
} }
@@ -0,0 +1,25 @@
// <auto-generated/>
#nullable enable
namespace WotBlitzStatisticsPro.Blazor.GraphQl.State
{
[global::System.CodeDom.Compiler.GeneratedCode("StrawberryShake", "11.2.2.0")]
public partial class Player_AccountMedals_Sections_Medals_AchievementFromAchievementEntityMapper : global::StrawberryShake.IEntityMapper<global::WotBlitzStatisticsPro.Blazor.GraphQl.State.AchievementEntity, Player_AccountMedals_Sections_Medals_Achievement>
{
private readonly global::StrawberryShake.IEntityStore _entityStore;
public Player_AccountMedals_Sections_Medals_AchievementFromAchievementEntityMapper(global::StrawberryShake.IEntityStore entityStore)
{
_entityStore = entityStore ?? throw new global::System.ArgumentNullException(nameof(entityStore));
}
public Player_AccountMedals_Sections_Medals_Achievement Map(global::WotBlitzStatisticsPro.Blazor.GraphQl.State.AchievementEntity entity, global::StrawberryShake.IEntityStoreSnapshot? snapshot = null)
{
if (snapshot is null)
{
snapshot = _entityStore.CurrentSnapshot;
}
return new Player_AccountMedals_Sections_Medals_Achievement(entity.Id, entity.Name, entity.MedalType, entity.Condition, entity.Description, entity.AchievementValue, entity.MaxSeriesValue, entity.Image, entity.ImageBig, entity.Order, entity.SectionId);
}
}
}
@@ -13,7 +13,7 @@ namespace WotBlitzStatisticsPro.Blazor.GraphQl.State
global::System.String __typename = obj.GetProperty("__typename").GetString()!; global::System.String __typename = obj.GetProperty("__typename").GetString()!;
return __typename switch return __typename switch
{ {
_ => throw new global::System.NotSupportedException()} "Achievement" => ParseAchievementEntityId(obj, __typename), _ => throw new global::System.NotSupportedException()}
; ;
} }
@@ -22,9 +22,26 @@ namespace WotBlitzStatisticsPro.Blazor.GraphQl.State
{ {
return entityId.Name switch return entityId.Name switch
{ {
_ => throw new global::System.NotSupportedException()} "Achievement" => FormatAchievementEntityId(entityId), _ => throw new global::System.NotSupportedException()}
; ;
} }
private global::StrawberryShake.EntityId ParseAchievementEntityId(global::System.Text.Json.JsonElement obj, global::System.String type)
{
return new global::StrawberryShake.EntityId(type, obj.GetProperty("id").GetString()!);
}
private global::System.String FormatAchievementEntityId(global::StrawberryShake.EntityId entityId)
{
using var writer = new global::StrawberryShake.Internal.ArrayWriter();
using var jsonWriter = new global::System.Text.Json.Utf8JsonWriter(writer, _options);
jsonWriter.WriteStartObject();
jsonWriter.WriteString("__typename", entityId.Name);
jsonWriter.WriteString("id", (global::System.String)entityId.Value);
jsonWriter.WriteEndObject();
jsonWriter.Flush();
return global::System.Text.Encoding.UTF8.GetString(writer.GetInternalBuffer(), 0, writer.Length);
}
} }
} }
@@ -1,4 +1,5 @@
using System.Threading.Tasks; using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
using WotBlitzStatisticsPro.Blazor.GraphQl; using WotBlitzStatisticsPro.Blazor.GraphQl;
using WotBlitzStatisticsPro.Blazor.Services; using WotBlitzStatisticsPro.Blazor.Services;
@@ -20,12 +21,14 @@ namespace WotBlitzStatisticsPro.Blazor.Pages
public IPlayer_AccountInfo AccountInfo { get; set; } public IPlayer_AccountInfo AccountInfo { get; set; }
public IReadOnlyList<IPlayer_AccountMedals_Sections> AchievementsBySection { get; set; }
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
var settings = await LocalStorageService.ReadSettings(); var settings = await LocalStorageService.ReadSettings();
CurrentRealmType = settings.RealmType; CurrentRealmType = settings.RealmType;
AccountInfo = await GraphQlBackendService.GetPlayerInfo(AccountId, CurrentRealmType); (AccountInfo, AchievementsBySection) = await GraphQlBackendService.GetPlayerInfo(AccountId, CurrentRealmType);
await base.OnInitializedAsync(); await base.OnInitializedAsync();
@@ -38,12 +38,12 @@ namespace WotBlitzStatisticsPro.Blazor.Services
return clans.Data?.Clans; return clans.Data?.Clans;
} }
public async Task<IPlayer_AccountInfo> GetPlayerInfo(long accountId, RealmType realmType) public async Task<(IPlayer_AccountInfo accountInfo, IReadOnlyList<IPlayer_AccountMedals_Sections> achievementsBySection)> GetPlayerInfo(long accountId, RealmType realmType)
{ {
var playerInfo = await _client.Player.ExecuteAsync(accountId, realmType, GetLanguage()); var playerInfo = await _client.Player.ExecuteAsync(accountId, realmType, GetLanguage());
CheckErrors(playerInfo.Errors); CheckErrors(playerInfo.Errors);
return playerInfo.Data?.AccountInfo; return (playerInfo.Data?.AccountInfo, playerInfo.Data?.AccountMedals?.Sections);
} }
private RequestLanguage GetLanguage() private RequestLanguage GetLanguage()
@@ -14,7 +14,7 @@ namespace WotBlitzStatisticsPro.Blazor.Services
string clanNameOrTag, string clanNameOrTag,
RealmType realmType); RealmType realmType);
Task<IPlayer_AccountInfo> GetPlayerInfo( Task<(IPlayer_AccountInfo accountInfo, IReadOnlyList<IPlayer_AccountMedals_Sections> achievementsBySection)> GetPlayerInfo(
long accountId, long accountId,
RealmType realmType); RealmType realmType);
} }
@@ -1,757 +1,859 @@
namespace WotBlitzStatisticsPro.Blazor.Services.Mock using System;
{ using System.Collections.Generic;
public class AchievementsMockData using System.Text.Json;
{ using Newtonsoft.Json.Linq;
using WotBlitzStatisticsPro.Blazor.GraphQl;
namespace WotBlitzStatisticsPro.Blazor.Services.Mock
{
public static class AchievementsMockData
{
public static Player_AccountMedals_AccountAchievementsResponse GetStaticAchievements()
{
var jObject = JObject.Parse(_json);
var accountId = jObject["accountId"]?.Value<long>();
var sectionTokens = jObject["sections"];
private string _json = @" var sections = new List<IPlayer_AccountMedals_Sections>();
if (sectionTokens != null)
{
foreach (var sectionToken in sectionTokens)
{
var medalTokens = sectionToken?["medals"];
var medals = new List<IPlayer_AccountMedals_Sections_Medals>();
if (medalTokens != null)
{
foreach (var medalToken in medalTokens)
{
medals.Add(new Player_AccountMedals_Sections_Medals_Achievement(
medalToken["id"].Value<string>(),
medalToken["name"]?.Value<string>(),
medalToken["medalType"]?.Value<string>(),
medalToken["condition"]?.Value<string>(),
medalToken["description"]?.Value<string>(),
medalToken["achievementValue"].Value<int>(),
medalToken["maxSeriesValue"]?.Value<int?>(),
medalToken["image"]?.Value<string>(),
medalToken["imageBig"]?.Value<string>(),
medalToken["order"]?.Value<long?>(),
medalToken["sectionId"]?.Value<string>()
));
}
sections.Add(new Player_AccountMedals_Sections_AchievementSection(
sectionToken["sectionId"].Value<string>(),
sectionToken["order"].Value<int>(),
sectionToken["name"].Value<string>(),
medals
));
}
}
}
return new Player_AccountMedals_AccountAchievementsResponse(accountId!.Value, sections);
}
private static string _json = @"
{ {
""data"": {
""accountAchievements"": {
""accountId"": 90277267, ""accountId"": 90277267,
""achievementSections"": [ ""sections"": [
{ {
""sectionId"": ""platoon"", ""sectionId"": ""platoon"",
""name"": ""ВЗВОДНЫЕ НАГРАДЫ"",
""order"": 5, ""order"": 5,
""achievements"": [ ""name"": ""ВЗВОДНЫЕ НАГРАДЫ"",
""medals"": [
{ {
""id"": ""punisher"", ""id"": ""punisher"",
""sectionId"": ""platoon"",
""name"": ""«Мститель»"", ""name"": ""«Мститель»"",
""medalType"": null,
""condition"": ""• IV степени – 1\n• III степени – 10\n• II степени – 100\n• I степени – 1 000"", ""condition"": ""• IV степени – 1\n• III степени – 10\n• II степени – 100\n• I степени – 1 000"",
""description"": ""Ликвидировать противника, уничтожившего игрока вашего взвода."", ""description"": ""Ликвидировать противника, уничтожившего игрока вашего взвода."",
""achievementValue"": 4, ""achievementValue"": 4,
""maxSeriesValue"": 1, ""maxSeriesValue"": 1,
""image"": null, ""image"": null,
""imageBig"": null, ""imageBig"": null,
""order"": 1057 ""order"": 1057,
""sectionId"": ""platoon""
}, },
{ {
""id"": ""jointVictory"", ""id"": ""jointVictory"",
""sectionId"": ""platoon"",
""name"": ""«Совместная победа»"", ""name"": ""«Совместная победа»"",
""medalType"": null,
""condition"": ""• IV степени – 1\n• III степени – 10\n• II степени – 100\n• I степени – 1 000"", ""condition"": ""• IV степени – 1\n• III степени – 10\n• II степени – 100\n• I степени – 1 000"",
""description"": ""За количество победных боёв в составе взвода."", ""description"": ""За количество победных боёв в составе взвода."",
""achievementValue"": 3, ""achievementValue"": 3,
""maxSeriesValue"": 23, ""maxSeriesValue"": 23,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/jointVictory3.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/jointVictory3.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/jointVictory3.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/jointVictory3.png"",
""order"": 1055 ""order"": 1055,
""sectionId"": ""platoon""
}, },
{ {
""id"": ""medalCrucialContribution"", ""id"": ""medalCrucialContribution"",
""sectionId"": ""platoon"",
""name"": ""«Решающий вклад» (medalCrucialContribution)"", ""name"": ""«Решающий вклад» (medalCrucialContribution)"",
""medalType"": null,
""condition"": ""• Выдаётся обоим игрокам взвода."", ""condition"": ""• Выдаётся обоим игрокам взвода."",
""description"": ""Взвод должен уничтожить не менее 6 танков противника."", ""description"": ""Взвод должен уничтожить не менее 6 танков противника."",
""achievementValue"": 1, ""achievementValue"": 1,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalCrucialContribution.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalCrucialContribution.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalCrucialContribution.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalCrucialContribution.png"",
""order"": 400 ""order"": 400,
""sectionId"": ""platoon""
}, },
{ {
""id"": ""medalBrothersInArms"", ""id"": ""medalBrothersInArms"",
""sectionId"": ""platoon"",
""name"": ""«Братья по оружию» (medalBrothersInArms)"", ""name"": ""«Братья по оружию» (medalBrothersInArms)"",
""medalType"": null,
""condition"": ""• Взвод должен выжить в бою.\n• Выдаётся обоим игрокам взвода."", ""condition"": ""• Взвод должен выжить в бою.\n• Выдаётся обоим игрокам взвода."",
""description"": ""Каждый игрок взвода должен уничтожить не менее 2 танков противника."", ""description"": ""Каждый игрок взвода должен уничтожить не менее 2 танков противника."",
""achievementValue"": 1, ""achievementValue"": 1,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalBrothersInArms.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalBrothersInArms.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalBrothersInArms.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalBrothersInArms.png"",
""order"": 401 ""order"": 401,
""sectionId"": ""platoon""
} }
] ]
}, },
{ {
""sectionId"": ""title"", ""sectionId"": ""title"",
""name"": ""ПОЧЁТНЫЕ ЗВАНИЯ"",
""order"": 1, ""order"": 1,
""achievements"": [ ""name"": ""ПОЧЁТНЫЕ ЗВАНИЯ"",
""medals"": [
{ {
""id"": ""armorPiercer"", ""id"": ""armorPiercer"",
""sectionId"": ""title"",
""name"": ""«Бронебойщик» (armorPiercer)"", ""name"": ""«Бронебойщик» (armorPiercer)"",
""medalType"": null,
""condition"": ""• Серия прерывается непробитием, рикошетом или промахом.\n• Серия ведётся для каждого танка отдельно и может продолжиться в следующем бою на этом же танке.\n• В общий зачёт идёт максимальная серия."", ""condition"": ""• Серия прерывается непробитием, рикошетом или промахом.\n• Серия ведётся для каждого танка отдельно и может продолжиться в следующем бою на этом же танке.\n• В общий зачёт идёт максимальная серия."",
""description"": ""Пробить броню противника не менее 10 раз подряд."", ""description"": ""Пробить броню противника не менее 10 раз подряд."",
""achievementValue"": 1, ""achievementValue"": 1,
""maxSeriesValue"": 61, ""maxSeriesValue"": 61,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/armorPiercer.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/armorPiercer.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/armorPiercer.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/armorPiercer.png"",
""order"": 1014 ""order"": 1014,
""sectionId"": ""title""
}, },
{ {
""id"": ""mechanicEngineer6"", ""id"": ""mechanicEngineer6"",
""sectionId"": ""title"",
""name"": ""«Инженер-механик: Япония» (mechanicEngineer6)"", ""name"": ""«Инженер-механик: Япония» (mechanicEngineer6)"",
""medalType"": null,
""condition"": ""• Неисследованные модули не являются препятствием."", ""condition"": ""• Неисследованные модули не являются препятствием."",
""description"": ""Исследовать все танки в Дереве танков Японии."", ""description"": ""Исследовать все танки в Дереве танков Японии."",
""achievementValue"": 1, ""achievementValue"": 1,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/mechanicEngineer6.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/mechanicEngineer6.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/mechanicEngineer6.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/mechanicEngineer6.png"",
""order"": 1206 ""order"": 1206,
""sectionId"": ""title""
}, },
{ {
""id"": ""kamikaze"", ""id"": ""kamikaze"",
""sectionId"": ""title"",
""name"": ""«Камикадзе» (kamikaze)"", ""name"": ""«Камикадзе» (kamikaze)"",
""medalType"": null,
""condition"": ""• Танк противника должен быть выше уровнем.\n• Не более одной награды на игрока за бой."", ""condition"": ""• Танк противника должен быть выше уровнем.\n• Не более одной награды на игрока за бой."",
""description"": ""Уничтожить противника тараном."", ""description"": ""Уничтожить противника тараном."",
""achievementValue"": 24, ""achievementValue"": 24,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/kamikaze.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/kamikaze.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/kamikaze.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/kamikaze.png"",
""order"": 703 ""order"": 703,
""sectionId"": ""title""
}, },
{ {
""id"": ""sinai"", ""id"": ""sinai"",
""sectionId"": ""title"",
""name"": ""«Лев Синая» (sinai)"", ""name"": ""«Лев Синая» (sinai)"",
""medalType"": null,
""condition"": ""\t• ИС\n\t• ИС-3\n\t• ИС-3 Защитник\n\t• ИС-4\n\t• ИС-6\n\t• ИС-6 Бесстрашный\n\t• ИС-7\n\t• ИС-8\n\t• ИСУ-152\n\t• Объект 252У\n\t• Объект 263\n\t• Объект 268\n\t• Объект 704\n\t• ИСУ-122С\n\t• ИС-2 (1945)\n\t• ИС-2Ш\n\t• ИС-5\n\t• ИСУ-130\n\t• IS-2 Pravda SP\n\t• IS-2\n\n• Засчитывается сумма результатов по всем танкам.\n• В общем зачёте повторно полученные награды суммируются."", ""condition"": ""\t• ИС\n\t• ИС-3\n\t• ИС-3 Защитник\n\t• ИС-4\n\t• ИС-6\n\t• ИС-6 Бесстрашный\n\t• ИС-7\n\t• ИС-8\n\t• ИСУ-152\n\t• Объект 252У\n\t• Объект 263\n\t• Объект 268\n\t• Объект 704\n\t• ИСУ-122С\n\t• ИС-2 (1945)\n\t• ИС-2Ш\n\t• ИС-5\n\t• ИСУ-130\n\t• IS-2 Pravda SP\n\t• IS-2\n\n• Засчитывается сумма результатов по всем танкам.\n• В общем зачёте повторно полученные награды суммируются."",
""description"": ""Уничтожить 100 танков ИС или танков на их базе.\nЗасчитываются:"", ""description"": ""Уничтожить 100 танков ИС или танков на их базе.\nЗасчитываются:"",
""achievementValue"": 11, ""achievementValue"": 11,
""maxSeriesValue"": 1188, ""maxSeriesValue"": 1188,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/sinai.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/sinai.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/sinai.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/sinai.png"",
""order"": 1013 ""order"": 1013,
""sectionId"": ""title""
}, },
{ {
""id"": ""titleSniper"", ""id"": ""titleSniper"",
""sectionId"": ""title"",
""name"": ""«Стрелок» (titleSniper)"", ""name"": ""«Стрелок» (titleSniper)"",
""medalType"": null,
""condition"": ""• Серия прерывается промахом.\n• Серия ведётся для каждого танка отдельно и может продолжиться в следующем бою на этом же танке.\n• В общий зачёт идёт максимальная серия."", ""condition"": ""• Серия прерывается промахом.\n• Серия ведётся для каждого танка отдельно и может продолжиться в следующем бою на этом же танке.\n• В общий зачёт идёт максимальная серия."",
""description"": ""Попасть в противника не менее 10 раз подряд."", ""description"": ""Попасть в противника не менее 10 раз подряд."",
""achievementValue"": 1, ""achievementValue"": 1,
""maxSeriesValue"": 96, ""maxSeriesValue"": 96,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/titleSniper.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/titleSniper.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/titleSniper.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/titleSniper.png"",
""order"": 1015 ""order"": 1015,
""sectionId"": ""title""
}, },
{ {
""id"": ""beasthunter"", ""id"": ""beasthunter"",
""sectionId"": ""title"",
""name"": ""«Зверобой» (beasthunter)"", ""name"": ""«Зверобой» (beasthunter)"",
""medalType"": null,
""condition"": ""\t• Tiger II\n\t• Panther\n\t• Panther II\n\t• Panther/M10\n\t• Panther 8,8\n\t• Jagdpanther\n\t• Jagdpanther II\n\t• Tiger (P)\n\t• Tiger I\n\t• Jagdtiger\n\t• Jagdtiger 8,8\n\t• Новогодний Jagdtiger 8,8\n\t• Leopard Prototyp A\n\t• Leopard 1\n\t• Löwe\n\t• Tiger Kuromorimine SP\n\t• VK 16.02 Leopard\n\t• Tiger 131\n\n• Засчитывается сумма результатов по всем танкам.\n• В общем зачёте повторно полученные награды суммируются."", ""condition"": ""\t• Tiger II\n\t• Panther\n\t• Panther II\n\t• Panther/M10\n\t• Panther 8,8\n\t• Jagdpanther\n\t• Jagdpanther II\n\t• Tiger (P)\n\t• Tiger I\n\t• Jagdtiger\n\t• Jagdtiger 8,8\n\t• Новогодний Jagdtiger 8,8\n\t• Leopard Prototyp A\n\t• Leopard 1\n\t• Löwe\n\t• Tiger Kuromorimine SP\n\t• VK 16.02 Leopard\n\t• Tiger 131\n\n• Засчитывается сумма результатов по всем танкам.\n• В общем зачёте повторно полученные награды суммируются."",
""description"": ""Уничтожить 100 танков «семейства кошачьих».\nЗасчитываются:"", ""description"": ""Уничтожить 100 танков «семейства кошачьих».\nЗасчитываются:"",
""achievementValue"": 7, ""achievementValue"": 7,
""maxSeriesValue"": 781, ""maxSeriesValue"": 781,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/beasthunter.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/beasthunter.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/beasthunter.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/beasthunter.png"",
""order"": 1012 ""order"": 1012,
""sectionId"": ""title""
}, },
{ {
""id"": ""tankExpert3"", ""id"": ""tankExpert3"",
""sectionId"": ""title"",
""name"": ""«Эксперт: Китай» (tankExpert3)"", ""name"": ""«Эксперт: Китай» (tankExpert3)"",
""medalType"": null,
""condition"": null, ""condition"": null,
""description"": ""Уничтожить все танки из Дерева танков Китая, исключая премиум и коллекционные."", ""description"": ""Уничтожить все танки из Дерева танков Китая, исключая премиум и коллекционные."",
""achievementValue"": 1, ""achievementValue"": 1,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/tankExpert3.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/tankExpert3.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/tankExpert3.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/tankExpert3.png"",
""order"": 1303 ""order"": 1303,
""sectionId"": ""title""
}, },
{ {
""id"": ""tankExpert2"", ""id"": ""tankExpert2"",
""sectionId"": ""title"",
""name"": ""«Эксперт: США» (tankExpert2)"", ""name"": ""«Эксперт: США» (tankExpert2)"",
""medalType"": null,
""condition"": null, ""condition"": null,
""description"": ""Уничтожить все танки из Дерева танков США, исключая премиум и коллекционные."", ""description"": ""Уничтожить все танки из Дерева танков США, исключая премиум и коллекционные."",
""achievementValue"": 1, ""achievementValue"": 1,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/tankExpert2.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/tankExpert2.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/tankExpert2.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/tankExpert2.png"",
""order"": 1302 ""order"": 1302,
""sectionId"": ""title""
}, },
{ {
""id"": ""tankExpert1"", ""id"": ""tankExpert1"",
""sectionId"": ""title"",
""name"": ""«Эксперт: Германия» (tankExpert1)"", ""name"": ""«Эксперт: Германия» (tankExpert1)"",
""medalType"": null,
""condition"": null, ""condition"": null,
""description"": ""Уничтожить все танки из Дерева танков Германии, исключая премиум и коллекционные."", ""description"": ""Уничтожить все танки из Дерева танков Германии, исключая премиум и коллекционные."",
""achievementValue"": 1, ""achievementValue"": 1,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/tankExpert1.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/tankExpert1.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/tankExpert1.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/tankExpert1.png"",
""order"": 1301 ""order"": 1301,
""sectionId"": ""title""
}, },
{ {
""id"": ""tankExpert0"", ""id"": ""tankExpert0"",
""sectionId"": ""title"",
""name"": ""«Эксперт: СССР» (tankExpert0)"", ""name"": ""«Эксперт: СССР» (tankExpert0)"",
""medalType"": null,
""condition"": null, ""condition"": null,
""description"": ""Уничтожить все танки из Дерева танков СССР, исключая премиум и коллекционные."", ""description"": ""Уничтожить все танки из Дерева танков СССР, исключая премиум и коллекционные."",
""achievementValue"": 1, ""achievementValue"": 1,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/tankExpert0.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/tankExpert0.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/tankExpert0.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/tankExpert0.png"",
""order"": 1300 ""order"": 1300,
""sectionId"": ""title""
}, },
{ {
""id"": ""tankExpert6"", ""id"": ""tankExpert6"",
""sectionId"": ""title"",
""name"": ""«Эксперт: Япония» (tankExpert6)"", ""name"": ""«Эксперт: Япония» (tankExpert6)"",
""medalType"": null,
""condition"": null, ""condition"": null,
""description"": ""Уничтожить все танки из Дерева танков Японии, исключая премиум и коллекционные."", ""description"": ""Уничтожить все танки из Дерева танков Японии, исключая премиум и коллекционные."",
""achievementValue"": 1, ""achievementValue"": 1,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/tankExpert6.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/tankExpert6.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/tankExpert6.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/tankExpert6.png"",
""order"": 1306 ""order"": 1306,
""sectionId"": ""title""
}, },
{ {
""id"": ""tankExpert5"", ""id"": ""tankExpert5"",
""sectionId"": ""title"",
""name"": ""«Эксперт: Великобритания» (tankExpert5)"", ""name"": ""«Эксперт: Великобритания» (tankExpert5)"",
""medalType"": null,
""condition"": null, ""condition"": null,
""description"": ""Уничтожить все танки из Дерева танков Великобритании, исключая премиум и коллекционные."", ""description"": ""Уничтожить все танки из Дерева танков Великобритании, исключая премиум и коллекционные."",
""achievementValue"": 1, ""achievementValue"": 1,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/tankExpert5.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/tankExpert5.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/tankExpert5.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/tankExpert5.png"",
""order"": 1305 ""order"": 1305,
""sectionId"": ""title""
}, },
{ {
""id"": ""tankExpert4"", ""id"": ""tankExpert4"",
""sectionId"": ""title"",
""name"": ""«Эксперт: Франция» (tankExpert4)"", ""name"": ""«Эксперт: Франция» (tankExpert4)"",
""medalType"": null,
""condition"": null, ""condition"": null,
""description"": ""Уничтожить все танки из Дерева танков Франции, исключая премиум и коллекционные."", ""description"": ""Уничтожить все танки из Дерева танков Франции, исключая премиум и коллекционные."",
""achievementValue"": 1, ""achievementValue"": 1,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/tankExpert4.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/tankExpert4.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/tankExpert4.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/tankExpert4.png"",
""order"": 1304 ""order"": 1304,
""sectionId"": ""title""
}, },
{ {
""id"": ""handOfDeath"", ""id"": ""handOfDeath"",
""sectionId"": ""title"",
""name"": ""«Коса Смерти» (handOfDeath)"", ""name"": ""«Коса Смерти» (handOfDeath)"",
""medalType"": null,
""condition"": ""• Серия ведётся для каждого танка отдельно и может продолжиться в следующем бою на этом же танке.\n• В общий зачёт идёт максимальная серия.\n• Выдаётся в момент окончания очередной рекордной серии."", ""condition"": ""• Серия ведётся для каждого танка отдельно и может продолжиться в следующем бою на этом же танке.\n• В общий зачёт идёт максимальная серия.\n• Выдаётся в момент окончания очередной рекордной серии."",
""description"": ""Уничтожить подряд не менее 3 танков противника, затратив на вторую и последующие по одному снаряду."", ""description"": ""Уничтожить подряд не менее 3 танков противника, затратив на вторую и последующие по одному снаряду."",
""achievementValue"": 1, ""achievementValue"": 1,
""maxSeriesValue"": 5, ""maxSeriesValue"": 5,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/handOfDeath.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/handOfDeath.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/handOfDeath.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/handOfDeath.png"",
""order"": 1002 ""order"": 1002,
""sectionId"": ""title""
}, },
{ {
""id"": ""invincible"", ""id"": ""invincible"",
""sectionId"": ""title"",
""name"": ""«Неуязвимый» (invincible)"", ""name"": ""«Неуязвимый» (invincible)"",
""medalType"": null,
""condition"": ""• Серия ведётся для каждого танка отдельно и может продолжиться в следующем бою на этом же танке.\n• В общий зачёт идёт максимальная серия."", ""condition"": ""• Серия ведётся для каждого танка отдельно и может продолжиться в следующем бою на этом же танке.\n• В общий зачёт идёт максимальная серия."",
""description"": ""Не получить урона в 5 боях подряд."", ""description"": ""Не получить урона в 5 боях подряд."",
""achievementValue"": 0, ""achievementValue"": 0,
""maxSeriesValue"": 4, ""maxSeriesValue"": 4,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/invincible.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/invincible.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/invincible.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/invincible.png"",
""order"": 702 ""order"": 702,
""sectionId"": ""title""
}, },
{ {
""id"": ""tankExpert"", ""id"": ""tankExpert"",
""sectionId"": ""title"",
""name"": ""«Эксперт» (tankExpert)"", ""name"": ""«Эксперт» (tankExpert)"",
""medalType"": null,
""condition"": null, ""condition"": null,
""description"": ""Уничтожить все танки из Дерева танков каждой нации, исключая премиум и коллекционные."", ""description"": ""Уничтожить все танки из Дерева танков каждой нации, исключая премиум и коллекционные."",
""achievementValue"": 0, ""achievementValue"": 0,
""maxSeriesValue"": 255, ""maxSeriesValue"": 255,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/tankExpert.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/tankExpert.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/tankExpert.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/tankExpert.png"",
""order"": 1101 ""order"": 1101,
""sectionId"": ""title""
}, },
{ {
""id"": ""diehard"", ""id"": ""diehard"",
""sectionId"": ""title"",
""name"": ""«Живучий» (diehard)"", ""name"": ""«Живучий» (diehard)"",
""medalType"": null,
""condition"": ""• Серия ведётся для каждого танка отдельно и может продолжиться в следующем бою на этом же танке.\n• В общий зачёт идёт максимальная серия."", ""condition"": ""• Серия ведётся для каждого танка отдельно и может продолжиться в следующем бою на этом же танке.\n• В общий зачёт идёт максимальная серия."",
""description"": ""Выжить в 10 боях подряд на одном танке."", ""description"": ""Выжить в 10 боях подряд на одном танке."",
""achievementValue"": 0, ""achievementValue"": 0,
""maxSeriesValue"": 8, ""maxSeriesValue"": 8,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/diehard.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/diehard.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/diehard.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/diehard.png"",
""order"": 106 ""order"": 106,
""sectionId"": ""title""
}, },
{ {
""id"": ""pattonValley"", ""id"": ""pattonValley"",
""sectionId"": ""title"",
""name"": ""«Долина Паттонов» (pattonValley)"", ""name"": ""«Долина Паттонов» (pattonValley)"",
""medalType"": null,
""condition"": ""\t• M46 Patton\n\t• M48 Patton\n\t• M60\n\n• Засчитывается сумма результатов по всем танкам.\n• В общем зачёте повторно полученные награды суммируются."", ""condition"": ""\t• M46 Patton\n\t• M48 Patton\n\t• M60\n\n• Засчитывается сумма результатов по всем танкам.\n• В общем зачёте повторно полученные награды суммируются."",
""description"": ""Уничтожить 100 танков Patton.\nЗасчитываются:"", ""description"": ""Уничтожить 100 танков Patton.\nЗасчитываются:"",
""achievementValue"": 0, ""achievementValue"": 0,
""maxSeriesValue"": 25, ""maxSeriesValue"": 25,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/pattonValley.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/pattonValley.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/pattonValley.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/pattonValley.png"",
""order"": 1011 ""order"": 1011,
""sectionId"": ""title""
} }
] ]
}, },
{ {
""sectionId"": ""commemorative"", ""sectionId"": ""commemorative"",
""name"": ""ПАМЯТНЫЕ ЗНАКИ"",
""order"": 3, ""order"": 3,
""achievements"": [ ""name"": ""ПАМЯТНЫЕ ЗНАКИ"",
""medals"": [
{ {
""id"": ""cadet"", ""id"": ""cadet"",
""sectionId"": ""commemorative"",
""name"": ""«Кадет» (cadet)"", ""name"": ""«Кадет» (cadet)"",
""medalType"": null,
""condition"": null, ""condition"": null,
""description"": ""Пройти боевое обучение."", ""description"": ""Пройти боевое обучение."",
""achievementValue"": 1, ""achievementValue"": 1,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/cadet.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/cadet.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/cadet.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/cadet.png"",
""order"": 1051 ""order"": 1051,
""sectionId"": ""commemorative""
}, },
{ {
""id"": ""firstBlood"", ""id"": ""firstBlood"",
""sectionId"": ""commemorative"",
""name"": ""«Первая кровь» (firstBlood)"", ""name"": ""«Первая кровь» (firstBlood)"",
""medalType"": null,
""condition"": null, ""condition"": null,
""description"": ""Уничтожить 1 танк противника."", ""description"": ""Уничтожить 1 танк противника."",
""achievementValue"": 1, ""achievementValue"": 1,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/firstBlood.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/firstBlood.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/firstBlood.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/firstBlood.png"",
""order"": 1052 ""order"": 1052,
""sectionId"": ""commemorative""
}, },
{ {
""id"": ""firstVictory"", ""id"": ""firstVictory"",
""sectionId"": ""commemorative"",
""name"": ""«Первая победа» (firstVictory)"", ""name"": ""«Первая победа» (firstVictory)"",
""medalType"": null,
""condition"": null, ""condition"": null,
""description"": ""Победить в первом обычном бою с другими игроками."", ""description"": ""Победить в первом обычном бою с другими игроками."",
""achievementValue"": 1, ""achievementValue"": 1,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/firstVictory.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/firstVictory.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/firstVictory.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/firstVictory.png"",
""order"": 1053 ""order"": 1053,
""sectionId"": ""commemorative""
}, },
{ {
""id"": ""huntsman"", ""id"": ""huntsman"",
""sectionId"": ""commemorative"",
""name"": ""«Егерь» (huntsman)"", ""name"": ""«Егерь» (huntsman)"",
""medalType"": null,
""condition"": null, ""condition"": null,
""description"": ""Уничтожить все лёгкие танки противника в одном бою, но не менее 3."", ""description"": ""Уничтожить все лёгкие танки противника в одном бою, но не менее 3."",
""achievementValue"": 4, ""achievementValue"": 4,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/huntsman.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/huntsman.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/huntsman.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/huntsman.png"",
""order"": 300 ""order"": 300,
""sectionId"": ""commemorative""
}, },
{ {
""id"": ""ironMan"", ""id"": ""ironMan"",
""sectionId"": ""commemorative"",
""name"": ""«Невозмутимый» (ironMan)"", ""name"": ""«Невозмутимый» (ironMan)"",
""medalType"": null,
""condition"": null, ""condition"": null,
""description"": ""Получить подряд не менее 10 рикошетов и непробитий от противника."", ""description"": ""Получить подряд не менее 10 рикошетов и непробитий от противника."",
""achievementValue"": 24, ""achievementValue"": 24,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/ironMan.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/ironMan.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/ironMan.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/ironMan.png"",
""order"": 1007 ""order"": 1007,
""sectionId"": ""commemorative""
}, },
{ {
""id"": ""sturdy"", ""id"": ""sturdy"",
""sectionId"": ""commemorative"",
""name"": ""«Спартанец» (sturdy)"", ""name"": ""«Спартанец» (sturdy)"",
""medalType"": null,
""condition"": ""• Выжить в бою."", ""condition"": ""• Выжить в бою."",
""description"": ""Получить рикошет или непробитие от противника при прочности танка менее 10%."", ""description"": ""Получить рикошет или непробитие от противника при прочности танка менее 10%."",
""achievementValue"": 82, ""achievementValue"": 82,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/sturdy.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/sturdy.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/sturdy.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/sturdy.png"",
""order"": 1008 ""order"": 1008,
""sectionId"": ""commemorative""
} }
] ]
}, },
{ {
""sectionId"": ""step"", ""sectionId"": ""step"",
""name"": ""ЭТАПНЫЕ НАГРАДЫ"",
""order"": 4, ""order"": 4,
""achievements"": [ ""name"": ""ЭТАПНЫЕ НАГРАДЫ"",
""medals"": [
{ {
""id"": ""medalCarius"", ""id"": ""medalCarius"",
""sectionId"": ""step"",
""name"": ""Медаль Кариуса"", ""name"": ""Медаль Кариуса"",
""medalType"": null,
""condition"": ""• IV степени – 10\n• III степени – 100\n• II степени – 1 000\n• I степени – 10 000"", ""condition"": ""• IV степени – 10\n• III степени – 100\n• II степени – 1 000\n• I степени – 10 000"",
""description"": ""За количество уничтоженных танков противника."", ""description"": ""За количество уничтоженных танков противника."",
""achievementValue"": 2, ""achievementValue"": 2,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalCarius2.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalCarius2.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalCarius2.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalCarius2.png"",
""order"": 1401 ""order"": 1401,
""sectionId"": ""step""
}, },
{ {
""id"": ""medalEkins"", ""id"": ""medalEkins"",
""sectionId"": ""step"",
""name"": ""Медаль Экинса"", ""name"": ""Медаль Экинса"",
""medalType"": null,
""condition"": ""• IV степени – 3\n• III степени – 30\n• II степени – 300\n• I степени – 3 000"", ""condition"": ""• IV степени – 3\n• III степени – 30\n• II степени – 300\n• I степени – 3 000"",
""description"": ""За количество уничтоженных танков противника VIII–X уровней."", ""description"": ""За количество уничтоженных танков противника VIII–X уровней."",
""achievementValue"": 1, ""achievementValue"": 1,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalEkins1.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalEkins1.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalEkins1.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalEkins1.png"",
""order"": 1402 ""order"": 1402,
""sectionId"": ""step""
}, },
{ {
""id"": ""medalKay"", ""id"": ""medalKay"",
""sectionId"": ""step"",
""name"": ""Медаль Кея"", ""name"": ""Медаль Кея"",
""medalType"": null,
""condition"": ""• IV степени – 1\n• III степени – 10\n• II степени – 100\n• I степени – 1 000"", ""condition"": ""• IV степени – 1\n• III степени – 10\n• II степени – 100\n• I степени – 1 000"",
""description"": ""За получение статуса «Герой битвы»."", ""description"": ""За получение статуса «Герой битвы»."",
""achievementValue"": 1, ""achievementValue"": 1,
""maxSeriesValue"": 1700, ""maxSeriesValue"": 1700,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalKay1.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalKay1.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalKay1.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalKay1.png"",
""order"": 1400 ""order"": 1400,
""sectionId"": ""step""
}, },
{ {
""id"": ""medalLeClerc"", ""id"": ""medalLeClerc"",
""sectionId"": ""step"",
""name"": ""Медаль Леклерка"", ""name"": ""Медаль Леклерка"",
""medalType"": null,
""condition"": ""• Победить в бою.\n• Засчитываются все очки захвата, набранные за один бой, за исключением очков захвата, полученных в Превосходстве.\n\n• IV степени – 30\n• III степени – 300\n• II степени – 3 000\n• I степени – 30 000"", ""condition"": ""• Победить в бою.\n• Засчитываются все очки захвата, набранные за один бой, за исключением очков захвата, полученных в Превосходстве.\n\n• IV степени – 30\n• III степени – 300\n• II степени – 3 000\n• I степени – 30 000"",
""description"": ""За суммарное количество очков захвата базы."", ""description"": ""За суммарное количество очков захвата базы."",
""achievementValue"": 2, ""achievementValue"": 2,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalLeClerc2.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalLeClerc2.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalLeClerc2.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalLeClerc2.png"",
""order"": 1406 ""order"": 1406,
""sectionId"": ""step""
}, },
{ {
""id"": ""medalAbrams"", ""id"": ""medalAbrams"",
""sectionId"": ""step"",
""name"": ""Медаль Абрамса"", ""name"": ""Медаль Абрамса"",
""medalType"": null,
""condition"": ""• IV степени – 10\n• III степени – 100\n• II степени – 1 000\n• I степени – 10 000"", ""condition"": ""• IV степени – 10\n• III степени – 100\n• II степени – 1 000\n• I степени – 10 000"",
""description"": ""За количество победных боёв, в которых игрок остался жив."", ""description"": ""За количество победных боёв, в которых игрок остался жив."",
""achievementValue"": 2, ""achievementValue"": 2,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalAbrams2.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalAbrams2.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalAbrams2.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalAbrams2.png"",
""order"": 1405 ""order"": 1405,
""sectionId"": ""step""
}, },
{ {
""id"": ""medalPoppel"", ""id"": ""medalPoppel"",
""sectionId"": ""step"",
""name"": ""Медаль Попеля"", ""name"": ""Медаль Попеля"",
""medalType"": null,
""condition"": ""• IV степени – 20\n• III степени – 200\n• II степени – 2 000\n• I степени – 20 000"", ""condition"": ""• IV степени – 20\n• III степени – 200\n• II степени – 2 000\n• I степени – 20 000"",
""description"": ""За количество обнаруженных танков противника."", ""description"": ""За количество обнаруженных танков противника."",
""achievementValue"": 2, ""achievementValue"": 2,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalPoppel2.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalPoppel2.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalPoppel2.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalPoppel2.png"",
""order"": 1404 ""order"": 1404,
""sectionId"": ""step""
}, },
{ {
""id"": ""medalSupremacy"", ""id"": ""medalSupremacy"",
""sectionId"": ""step"",
""name"": ""Медаль Превосходство"", ""name"": ""Медаль Превосходство"",
""medalType"": null,
""condition"": ""• Накопительная медаль.\n• Засчитываются все очки победы, набранные в Превосходстве.\n\n• IV степени – 10 000\n• III степени – 100 000\n• II степени – 1 000 000\n• I степени – 10 000 000"", ""condition"": ""• Накопительная медаль.\n• Засчитываются все очки победы, набранные в Превосходстве.\n\n• IV степени – 10 000\n• III степени – 100 000\n• II степени – 1 000 000\n• I степени – 10 000 000"",
""description"": ""За очки победы в Превосходстве."", ""description"": ""За очки победы в Превосходстве."",
""achievementValue"": 3, ""achievementValue"": 3,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalSupremacy3.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalSupremacy3.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalSupremacy3.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalSupremacy3.png"",
""order"": 1408 ""order"": 1408,
""sectionId"": ""step""
}, },
{ {
""id"": ""medalLavrinenko"", ""id"": ""medalLavrinenko"",
""sectionId"": ""step"",
""name"": ""Медаль Лавриненко"", ""name"": ""Медаль Лавриненко"",
""medalType"": null,
""condition"": ""• Засчитывается не более 100 очков за бой.\n• Не засчитываются сбитые очки захвата точек, заработанные в Превосходстве\n\n• IV степени – 30\n• III степени – 300\n• II степени – 3 000\n• I степени – 30 000"", ""condition"": ""• Засчитывается не более 100 очков за бой.\n• Не засчитываются сбитые очки захвата точек, заработанные в Превосходстве\n\n• IV степени – 30\n• III степени – 300\n• II степени – 3 000\n• I степени – 30 000"",
""description"": ""За суммарное количество сбитых очков захвата базы."", ""description"": ""За суммарное количество сбитых очков захвата базы."",
""achievementValue"": 2, ""achievementValue"": 2,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalLavrinenko2.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalLavrinenko2.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalLavrinenko2.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalLavrinenko2.png"",
""order"": 1407 ""order"": 1407,
""sectionId"": ""step""
}, },
{ {
""id"": ""medalKnispel"", ""id"": ""medalKnispel"",
""sectionId"": ""step"",
""name"": ""Медаль Книспеля"", ""name"": ""Медаль Книспеля"",
""medalType"": null,
""condition"": ""• IV степени – 10 000\n• III степени – 100 000\n• II степени – 1 000 000\n• I степени – 10 000 000"", ""condition"": ""• IV степени – 10 000\n• III степени – 100 000\n• II степени – 1 000 000\n• I степени – 10 000 000"",
""description"": ""За суммарное количество нанесённого и полученного урона."", ""description"": ""За суммарное количество нанесённого и полученного урона."",
""achievementValue"": 1, ""achievementValue"": 1,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalKnispel1.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalKnispel1.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalKnispel1.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalKnispel1.png"",
""order"": 1403 ""order"": 1403,
""sectionId"": ""step""
} }
] ]
}, },
{ {
""sectionId"": ""battle"", ""sectionId"": ""battle"",
""name"": ""«ГЕРОЙ БИТВЫ»"",
""order"": 0, ""order"": 0,
""achievements"": [ ""name"": ""«ГЕРОЙ БИТВЫ»"",
""medals"": [
{ {
""id"": ""invader"", ""id"": ""invader"",
""sectionId"": ""battle"",
""name"": ""«Захватчик» (invader)"", ""name"": ""«Захватчик» (invader)"",
""medalType"": null,
""condition"": ""• Выиграть бой захватом базы.\n• Засчитываются только очки, обеспечившие захват.\n• Не засчитываются очки захвата точек, полученные в Превосходстве."", ""condition"": ""• Выиграть бой захватом базы.\n• Засчитываются только очки, обеспечившие захват.\n• Не засчитываются очки захвата точек, полученные в Превосходстве."",
""description"": ""Получить наибольшее количество очков захвата базы, но не менее 80."", ""description"": ""Получить наибольшее количество очков захвата базы, но не менее 80."",
""achievementValue"": 6, ""achievementValue"": 6,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/invader.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/invader.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/invader.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/invader.png"",
""order"": 203 ""order"": 203,
""sectionId"": ""battle""
}, },
{ {
""id"": ""markOfMasteryII"", ""id"": ""markOfMasteryII"",
""sectionId"": ""battle"",
""name"": ""Знак классности \n«2 степень» (markOfMasteryII)"", ""name"": ""Знак классности \n«2 степень» (markOfMasteryII)"",
""medalType"": null,
""condition"": null, ""condition"": null,
""description"": ""Присваивается игроку за мастерство владения танком. Для получения награды необходимо заработать больше опыта за бой, чем средний максимальный опыт за неделю у 80% игроков на данном танке."", ""description"": ""Присваивается игроку за мастерство владения танком. Для получения награды необходимо заработать больше опыта за бой, чем средний максимальный опыт за неделю у 80% игроков на данном танке."",
""achievementValue"": 853, ""achievementValue"": 853,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/markOfMasteryII.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/markOfMasteryII.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/markOfMasteryII.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/markOfMasteryII.png"",
""order"": 2 ""order"": 2,
""sectionId"": ""battle""
}, },
{ {
""id"": ""markOfMasteryI"", ""id"": ""markOfMasteryI"",
""sectionId"": ""battle"",
""name"": ""Знак классности \n«1 степень» (markOfMasteryI)"", ""name"": ""Знак классности \n«1 степень» (markOfMasteryI)"",
""medalType"": null,
""condition"": null, ""condition"": null,
""description"": ""Присваивается игроку за мастерство владения танком. Для получения награды необходимо заработать больше опыта за бой, чем средний максимальный опыт за неделю у 95% игроков на данном танке."", ""description"": ""Присваивается игроку за мастерство владения танком. Для получения награды необходимо заработать больше опыта за бой, чем средний максимальный опыт за неделю у 95% игроков на данном танке."",
""achievementValue"": 203, ""achievementValue"": 203,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/markOfMasteryI.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/markOfMasteryI.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/markOfMasteryI.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/markOfMasteryI.png"",
""order"": 1 ""order"": 1,
""sectionId"": ""battle""
}, },
{ {
""id"": ""defender"", ""id"": ""defender"",
""sectionId"": ""battle"",
""name"": ""«Защитник» (defender)"", ""name"": ""«Защитник» (defender)"",
""medalType"": null,
""condition"": ""• При равном количестве сбитых очков награждается игрок, получивший наибольшее количество очков опыта за бой.\n• Выдаётся только одна награда за бой.\n• Не засчитываются очки захвата точек, полученные в Превосходстве."", ""condition"": ""• При равном количестве сбитых очков награждается игрок, получивший наибольшее количество очков опыта за бой.\n• Выдаётся только одна награда за бой.\n• Не засчитываются очки захвата точек, полученные в Превосходстве."",
""description"": ""Защитить базу, сбив наибольшее количество очков захвата, но не менее 70."", ""description"": ""Защитить базу, сбив наибольшее количество очков захвата, но не менее 70."",
""achievementValue"": 23, ""achievementValue"": 23,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/defender.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/defender.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/defender.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/defender.png"",
""order"": 202 ""order"": 202,
""sectionId"": ""battle""
}, },
{ {
""id"": ""markOfMasteryIII"", ""id"": ""markOfMasteryIII"",
""sectionId"": ""battle"",
""name"": ""Знак классности \n«3 степень» (markOfMasteryIII)"", ""name"": ""Знак классности \n«3 степень» (markOfMasteryIII)"",
""medalType"": null,
""condition"": null, ""condition"": null,
""description"": ""Присваивается игроку за мастерство владения танком. Для получения награды необходимо заработать больше опыта за бой, чем средний максимальный опыт за неделю у 50% игроков на данном танке."", ""description"": ""Присваивается игроку за мастерство владения танком. Для получения награды необходимо заработать больше опыта за бой, чем средний максимальный опыт за неделю у 50% игроков на данном танке."",
""achievementValue"": 1783, ""achievementValue"": 1783,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/markOfMasteryIII.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/markOfMasteryIII.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/markOfMasteryIII.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/markOfMasteryIII.png"",
""order"": 3 ""order"": 3,
""sectionId"": ""battle""
}, },
{ {
""id"": ""supporter"", ""id"": ""supporter"",
""sectionId"": ""battle"",
""name"": ""«Поддержка» (supporter)"", ""name"": ""«Поддержка» (supporter)"",
""medalType"": null,
""condition"": ""• Засчитываются цели, которые впоследствии были уничтожены другими игроками или самоуничтожились.\n• Рикошеты и непробития не учитываются.\n• При равном количестве повреждённых танков награждается игрок, получивший наибольшее количество очков опыта за бой.\n• Выдаётся только одна награда за бой."", ""condition"": ""• Засчитываются цели, которые впоследствии были уничтожены другими игроками или самоуничтожились.\n• Рикошеты и непробития не учитываются.\n• При равном количестве повреждённых танков награждается игрок, получивший наибольшее количество очков опыта за бой.\n• Выдаётся только одна награда за бой."",
""description"": ""Нанести урон или сбить гусеницу наибольшему количеству танков противника, но не менее чем 4."", ""description"": ""Нанести урон или сбить гусеницу наибольшему количеству танков противника, но не менее чем 4."",
""achievementValue"": 823, ""achievementValue"": 823,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/supporter.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/supporter.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/supporter.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/supporter.png"",
""order"": 6 ""order"": 6,
""sectionId"": ""battle""
}, },
{ {
""id"": ""steelwall"", ""id"": ""steelwall"",
""sectionId"": ""battle"",
""name"": ""«Стальная cтена» (steelwall)"", ""name"": ""«Стальная cтена» (steelwall)"",
""medalType"": null,
""condition"": ""• Выжить в бою.\n• При равном количестве полученного потенциального урона награждается игрок, получивший больше попаданий.\n• При равном количестве полученного потенциального урона и попаданий награждается игрок, получивший наибольшее количество очков опыта за бой.\n• Выдаётся только одна награда за бой."", ""condition"": ""• Выжить в бою.\n• При равном количестве полученного потенциального урона награждается игрок, получивший больше попаданий.\n• При равном количестве полученного потенциального урона и попаданий награждается игрок, получивший наибольшее количество очков опыта за бой.\n• Выдаётся только одна награда за бой."",
""description"": ""Получить не менее 1 000 единиц потенциального урона и не менее 11 попаданий."", ""description"": ""Получить не менее 1 000 единиц потенциального урона и не менее 11 попаданий."",
""achievementValue"": 129, ""achievementValue"": 129,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/steelwall.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/steelwall.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/steelwall.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/steelwall.png"",
""order"": 201 ""order"": 201,
""sectionId"": ""battle""
}, },
{ {
""id"": ""mainGun"", ""id"": ""mainGun"",
""sectionId"": ""battle"",
""name"": ""«Основной калибр» (mainGun)"", ""name"": ""«Основной калибр» (mainGun)"",
""medalType"": null,
""condition"": ""• Нанесённый урон должен составлять не менее 35% от суммарной прочности танков противника и не менее 1000 единиц.\n• При равном количестве нанесённого урона награждается игрок, получивший наибольшее количество очков опыта за бой.\n• Выдаётся только одна награда за бой."", ""condition"": ""• Нанесённый урон должен составлять не менее 35% от суммарной прочности танков противника и не менее 1000 единиц.\n• При равном количестве нанесённого урона награждается игрок, получивший наибольшее количество очков опыта за бой.\n• Выдаётся только одна награда за бой."",
""description"": ""Нанести наибольшее количество урона за бой."", ""description"": ""Нанести наибольшее количество урона за бой."",
""achievementValue"": 255, ""achievementValue"": 255,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/mainGun.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/mainGun.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/mainGun.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/mainGun.png"",
""order"": 5 ""order"": 5,
""sectionId"": ""battle""
}, },
{ {
""id"": ""warrior"", ""id"": ""warrior"",
""sectionId"": ""battle"",
""name"": ""«Воин» (warrior)"", ""name"": ""«Воин» (warrior)"",
""medalType"": null,
""condition"": ""• При равном счёте награждается игрок, получивший наибольшее количество очков опыта за бой.\n• Выдаётся только одна награда за бой."", ""condition"": ""• При равном счёте награждается игрок, получивший наибольшее количество очков опыта за бой.\n• Выдаётся только одна награда за бой."",
""description"": ""Уничтожить наибольшее количество танков противника, но не менее 4."", ""description"": ""Уничтожить наибольшее количество танков противника, но не менее 4."",
""achievementValue"": 236, ""achievementValue"": 236,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/warrior.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/warrior.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/warrior.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/warrior.png"",
""order"": 4 ""order"": 4,
""sectionId"": ""battle""
}, },
{ {
""id"": ""camper"", ""id"": ""camper"",
""sectionId"": ""battle"",
""name"": ""«Танкист-снайпер» (camper)"", ""name"": ""«Танкист-снайпер» (camper)"",
""medalType"": null,
""condition"": ""• Произвести не менее 8 выстрелов.\n• Не менее 80% попаданий должны быть с нанесением урона.\n• Учитывается урон танкам противника и повреждения модулей.\n• Общая точность стрельбы за бой должна быть не менее 85%.\n• Нанесённый урон должен превышать количество очков прочности танка игрока и быть не менее 1000 единиц.\n• При равном количестве нанесённого урона награждается игрок, получивший наибольшее количество очков опыта за бой.\n• Выдаётся только одна награда за бой."", ""condition"": ""• Произвести не менее 8 выстрелов.\n• Не менее 80% попаданий должны быть с нанесением урона.\n• Учитывается урон танкам противника и повреждения модулей.\n• Общая точность стрельбы за бой должна быть не менее 85%.\n• Нанесённый урон должен превышать количество очков прочности танка игрока и быть не менее 1000 единиц.\n• При равном количестве нанесённого урона награждается игрок, получивший наибольшее количество очков опыта за бой.\n• Выдаётся только одна награда за бой."",
""description"": ""Нанести наибольшее количество урона за бой с дистанции не менее 250 м."", ""description"": ""Нанести наибольшее количество урона за бой с дистанции не менее 250 м."",
""achievementValue"": 7, ""achievementValue"": 7,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/camper.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/camper.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/camper.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/camper.png"",
""order"": 7 ""order"": 7,
""sectionId"": ""battle""
}, },
{ {
""id"": ""markOfMastery"", ""id"": ""markOfMastery"",
""sectionId"": ""battle"",
""name"": ""Знак классности \n«Мастер» (markOfMastery)"", ""name"": ""Знак классности \n«Мастер» (markOfMastery)"",
""medalType"": null,
""condition"": null, ""condition"": null,
""description"": ""Присваивается игроку за мастерство владения танком. Для получения награды необходимо заработать больше опыта за бой, чем средний максимальный опыт за неделю у 99% игроков на данном танке."", ""description"": ""Присваивается игроку за мастерство владения танком. Для получения награды необходимо заработать больше опыта за бой, чем средний максимальный опыт за неделю у 99% игроков на данном танке."",
""achievementValue"": 76, ""achievementValue"": 76,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/markOfMastery.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/markOfMastery.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/markOfMastery.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/markOfMastery.png"",
""order"": 0 ""order"": 0,
""sectionId"": ""battle""
}, },
{ {
""id"": ""scout"", ""id"": ""scout"",
""sectionId"": ""battle"",
""name"": ""«Разведчик» (scout)"", ""name"": ""«Разведчик» (scout)"",
""medalType"": null,
""condition"": ""• Победить в бою.\n• Выдаётся только одна награда за бой."", ""condition"": ""• Победить в бою.\n• Выдаётся только одна награда за бой."",
""description"": ""Обнаружить наибольшее количество танков противника, но не менее 5."", ""description"": ""Обнаружить наибольшее количество танков противника, но не менее 5."",
""achievementValue"": 151, ""achievementValue"": 151,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/scout.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/scout.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/scout.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/scout.png"",
""order"": 204 ""order"": 204,
""sectionId"": ""battle""
}, },
{ {
""id"": ""evileye"", ""id"": ""evileye"",
""sectionId"": ""battle"",
""name"": ""«Дозорный» (evileye)"", ""name"": ""«Дозорный» (evileye)"",
""medalType"": null,
""condition"": ""• Засчитываются цели, разведданные по которым в момент их повреждения передавал только один игрок.\n• При равном количестве повреждённых танков награждается игрок, получивший наибольшее количество очков опыта за бой.\n• Выдаётся только одна награда за бой."", ""condition"": ""• Засчитываются цели, разведданные по которым в момент их повреждения передавал только один игрок.\n• При равном количестве повреждённых танков награждается игрок, получивший наибольшее количество очков опыта за бой.\n• Выдаётся только одна награда за бой."",
""description"": ""Предоставить разведданные, по которым союзники повредят не менее 3 танков противника."", ""description"": ""Предоставить разведданные, по которым союзники повредят не менее 3 танков противника."",
""achievementValue"": 70, ""achievementValue"": 70,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/evileye.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/evileye.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/evileye.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/evileye.png"",
""order"": 200 ""order"": 200,
""sectionId"": ""battle""
} }
] ]
}, },
{ {
""sectionId"": ""epic"", ""sectionId"": ""epic"",
""name"": ""ЭПИЧЕСКИЕ МЕДАЛИ"",
""order"": 2, ""order"": 2,
""achievements"": [ ""name"": ""ЭПИЧЕСКИЕ МЕДАЛИ"",
""medals"": [
{ {
""id"": ""medalHalonen"", ""id"": ""medalHalonen"",
""sectionId"": ""epic"",
""name"": ""Медаль Халонена (medalHalonen)"", ""name"": ""Медаль Халонена (medalHalonen)"",
""medalType"": null,
""condition"": ""• Уничтоженные танки должны превосходить ПТ-САУ игрока как минимум на 1 уровень."", ""condition"": ""• Уничтоженные танки должны превосходить ПТ-САУ игрока как минимум на 1 уровень."",
""description"": ""Уничтожить не менее 3 танков противника в одном бою, управляя ПТ-САУ."", ""description"": ""Уничтожить не менее 3 танков противника в одном бою, управляя ПТ-САУ."",
""achievementValue"": 3, ""achievementValue"": 3,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalHalonen.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalHalonen.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalHalonen.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalHalonen.png"",
""order"": 606 ""order"": 606,
""sectionId"": ""epic""
}, },
{ {
""id"": ""medalOskin"", ""id"": ""medalOskin"",
""sectionId"": ""epic"",
""name"": ""Медаль Оськина (medalOskin)"", ""name"": ""Медаль Оськина (medalOskin)"",
""medalType"": null,
""condition"": ""• Уничтоженные танки должны превосходить танк игрока как минимум на 1 уровень."", ""condition"": ""• Уничтоженные танки должны превосходить танк игрока как минимум на 1 уровень."",
""description"": ""Уничтожить 3 танка противника в одном бою, управляя средним танком."", ""description"": ""Уничтожить 3 танка противника в одном бою, управляя средним танком."",
""achievementValue"": 6, ""achievementValue"": 6,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalOskin.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalOskin.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalOskin.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalOskin.png"",
""order"": 603 ""order"": 603,
""sectionId"": ""epic""
}, },
{ {
""id"": ""medalRadleyWalters"", ""id"": ""medalRadleyWalters"",
""sectionId"": ""epic"",
""name"": ""Медаль Рэдли-Уолтерса (medalRadleyWalters)"", ""name"": ""Медаль Рэдли-Уолтерса (medalRadleyWalters)"",
""medalType"": null,
""condition"": ""• Управлять танком V уровня и выше."", ""condition"": ""• Управлять танком V уровня и выше."",
""description"": ""Уничтожить 5 танков противника в одном бою."", ""description"": ""Уничтожить 5 танков противника в одном бою."",
""achievementValue"": 35, ""achievementValue"": 35,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalRadleyWalters.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalRadleyWalters.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalRadleyWalters.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalRadleyWalters.png"",
""order"": 102 ""order"": 102,
""sectionId"": ""epic""
}, },
{ {
""id"": ""medalLehvaslaiho"", ""id"": ""medalLehvaslaiho"",
""sectionId"": ""epic"",
""name"": ""Медаль Лехвеслайхо (medalLehvaslaiho)"", ""name"": ""Медаль Лехвеслайхо (medalLehvaslaiho)"",
""medalType"": null,
""condition"": ""• Уничтоженные танки должны превосходить танк игрока как минимум на 1 уровень."", ""condition"": ""• Уничтоженные танки должны превосходить танк игрока как минимум на 1 уровень."",
""description"": ""Уничтожить 2 танка противника в одном бою, управляя средним танком."", ""description"": ""Уничтожить 2 танка противника в одном бою, управляя средним танком."",
""achievementValue"": 50, ""achievementValue"": 50,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalLehvaslaiho.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalLehvaslaiho.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalLehvaslaiho.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalLehvaslaiho.png"",
""order"": 604 ""order"": 604,
""sectionId"": ""epic""
}, },
{ {
""id"": ""medalOrlik"", ""id"": ""medalOrlik"",
""sectionId"": ""epic"",
""name"": ""Медаль Орлика (medalOrlik)"", ""name"": ""Медаль Орлика (medalOrlik)"",
""medalType"": null,
""condition"": ""• Уничтоженные танки должны превосходить танк игрока как минимум на 1 уровень."", ""condition"": ""• Уничтоженные танки должны превосходить танк игрока как минимум на 1 уровень."",
""description"": ""Уничтожить не менее 3 танков противника в одном бою, управляя лёгким танком."", ""description"": ""Уничтожить не менее 3 танков противника в одном бою, управляя лёгким танком."",
""achievementValue"": 4, ""achievementValue"": 4,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalOrlik.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalOrlik.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalOrlik.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalOrlik.png"",
""order"": 605 ""order"": 605,
""sectionId"": ""epic""
}, },
{ {
""id"": ""medalNikolas"", ""id"": ""medalNikolas"",
""sectionId"": ""epic"",
""name"": ""Медаль Николса (medalNikolas)"", ""name"": ""Медаль Николса (medalNikolas)"",
""medalType"": null,
""condition"": ""• Уничтоженные танки должны превосходить танк игрока как минимум на 1 уровень."", ""condition"": ""• Уничтоженные танки должны превосходить танк игрока как минимум на 1 уровень."",
""description"": ""Уничтожить не менее 4 танков противника в одном бою, управляя средним танком."", ""description"": ""Уничтожить не менее 4 танков противника в одном бою, управляя средним танком."",
""achievementValue"": 1, ""achievementValue"": 1,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalNikolas.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalNikolas.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalNikolas.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalNikolas.png"",
""order"": 602 ""order"": 602,
""sectionId"": ""epic""
}, },
{ {
""id"": ""medalKolobanov"", ""id"": ""medalKolobanov"",
""sectionId"": ""epic"",
""name"": ""Медаль Колобанова (medalKolobanov)"", ""name"": ""Медаль Колобанова (medalKolobanov)"",
""medalType"": null,
""condition"": ""• Выжить в бою."", ""condition"": ""• Выжить в бою."",
""description"": ""Победить в бою, оставшись в одиночку против 3 и более танков."", ""description"": ""Победить в бою, оставшись в одиночку против 3 и более танков."",
""achievementValue"": 7, ""achievementValue"": 7,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalKolobanov.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalKolobanov.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalKolobanov.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalKolobanov.png"",
""order"": 600 ""order"": 600,
""sectionId"": ""epic""
}, },
{ {
""id"": ""medalLafayettePool"", ""id"": ""medalLafayettePool"",
""sectionId"": ""epic"",
""name"": ""Медаль Пула (medalLafayettePool)"", ""name"": ""Медаль Пула (medalLafayettePool)"",
""medalType"": null,
""condition"": ""• Управлять танком V уровня и выше."", ""condition"": ""• Управлять танком V уровня и выше."",
""description"": ""Уничтожить 6 танков противника в одном бою."", ""description"": ""Уничтожить 6 танков противника в одном бою."",
""achievementValue"": 7, ""achievementValue"": 7,
""maxSeriesValue"": null, ""maxSeriesValue"": null,
""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalLafayettePool.png"", ""image"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/medalLafayettePool.png"",
""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalLafayettePool.png"", ""imageBig"": ""http://glossary-eu-static.gcdn.co/icons/wotb/current/achievements/big/medalLafayettePool.png"",
""order"": 101 ""order"": 101,
""sectionId"": ""epic""
} }
] ]
} }
] ]
} }
}
}
"; ";
} }
} }
@@ -74,7 +74,7 @@ namespace WotBlitzStatisticsPro.Blazor.Services.Mock
return result; return result;
} }
public async Task<IPlayer_AccountInfo> GetPlayerInfo(long accountId, RealmType realmType) public async Task<(IPlayer_AccountInfo accountInfo, IReadOnlyList<IPlayer_AccountMedals_Sections> achievementsBySection)> GetPlayerInfo(long accountId, RealmType realmType)
{ {
var faker = new Faker(FakerLanguage(GetLanguage())); var faker = new Faker(FakerLanguage(GetLanguage()));
var tanksCount = faker.Random.Number(10, 280); var tanksCount = faker.Random.Number(10, 280);
@@ -156,13 +156,13 @@ namespace WotBlitzStatisticsPro.Blazor.Services.Mock
await Task.Delay(1000); await Task.Delay(1000);
} }
return new Player_AccountInfo_AccountInfoResponse( var player = new Player_AccountInfo_AccountInfoResponse(
accountId, accountId,
faker.Date.Past(), faker.Date.Past(),
faker.Date.Past(), faker.Date.Past(),
faker.Internet.UserName(), faker.Internet.UserName(),
tanks[faker.Random.Number(1, tanks.Count)].TankId, tanks[faker.Random.Number(1, tanks.Count-1)].TankId,
tanks[faker.Random.Number(1, tanks.Count)].TankId, tanks[faker.Random.Number(1, tanks.Count-1)].TankId,
faker.Random.Long(1, 100000), faker.Random.Long(1, 100000),
faker.Random.Long(1, 9999), faker.Random.Long(1, 9999),
faker.Random.Long(1, 9999), faker.Random.Long(1, 9999),
@@ -190,6 +190,10 @@ namespace WotBlitzStatisticsPro.Blazor.Services.Mock
clanInfo, clanInfo,
tanks tanks
); );
var achievements = AchievementsMockData.GetStaticAchievements();
return (player, achievements?.Sections);
} }
private string FakerLanguage(RequestLanguage language) private string FakerLanguage(RequestLanguage language)
@@ -94,4 +94,29 @@ query player(
normalImage normalImage
} }
} }
accountMedals(
accountId: $accountId,
realmType: $realmType,
requestLanguage: $requestLanguage
) {
accountId
sections {
sectionId
order
name
medals {
id
name
medalType
condition
description
achievementValue
maxSeriesValue
image
imageBig
order
sectionId
}
}
}
} }
@@ -15,9 +15,9 @@ type Query {
"Tank statistics history for period since \"startDate\"" "Tank statistics history for period since \"startDate\""
tankInfoHistory("AccountId" accountId: Long! "TankId" tankId: Long! "Date from history started" startDate: DateTime! "Account region" realmType: RealmType "Request language" requestLanguage: RequestLanguage): TankInfoHistoryResponse! tankInfoHistory("AccountId" accountId: Long! "TankId" tankId: Long! "Date from history started" startDate: DateTime! "Account region" realmType: RealmType "Request language" requestLanguage: RequestLanguage): TankInfoHistoryResponse!
"Returns information about player's achievements" "Returns information about player's achievements"
accountAchievements("AccountId" accountId: Long! "Account region" realmType: RealmType "Request language" requestLanguage: RequestLanguage): AccountAchievementsResponse! accountMedals("AccountId" accountId: Long! "Account region" realmType: RealmType "Request language" requestLanguage: RequestLanguage): AccountAchievementsResponse!
"Returns information about player's tank achievements" "Returns information about player's tank achievements"
tankAchievements("AccountId" accountId: Long! "Account tank Id" tankId: Long! "Account region" realmType: RealmType "Request language" requestLanguage: RequestLanguage): AccountAchievementsResponse! tankMedals("AccountId" accountId: Long! "Account tank Id" tankId: Long! "Account region" realmType: RealmType "Request language" requestLanguage: RequestLanguage): AccountAchievementsResponse!
} }
type Mutation { type Mutation {
@@ -131,6 +131,8 @@ type AccountInfoResponse {
survivalRate: Decimal! survivalRate: Decimal!
"All player's tanks" "All player's tanks"
tanks: [TankInfoResponse!] tanks: [TankInfoResponse!]
"Account Region and request language"
regionAndLanguage: RealmAndLanguage!
} }
"Account search result item" "Account search result item"
@@ -285,6 +287,12 @@ type TankInfoResponse {
normalImage: String normalImage: String
} }
"Represents pair of realm type a nd requested language"
type RealmAndLanguage {
realm: RealmType!
language: RequestLanguage!
}
"Request for update dictionaries mutation" "Request for update dictionaries mutation"
input UpdateDictionariesRequestInput { input UpdateDictionariesRequestInput {
"Determines what dictionaries should be updated. Usage: StaticDictionaries | Achievements | Vehicles" "Determines what dictionaries should be updated. Usage: StaticDictionaries | Achievements | Vehicles"
@@ -304,7 +312,7 @@ type AccountAchievementsResponse {
"Player Id" "Player Id"
accountId: Long! accountId: Long!
"Player Achievements by sections" "Player Achievements by sections"
achievementSections: [AchievementSection!] sections: [AchievementSection!]
} }
"Information about tank statistics history" "Information about tank statistics history"
@@ -420,7 +428,7 @@ type AchievementSection {
"Section Name" "Section Name"
name: String! name: String!
"Achievements in the section" "Achievements in the section"
achievements: [Achievement!] medals: [Achievement!]
} }
"List of dictionaries" "List of dictionaries"
@@ -460,7 +468,7 @@ type Achievement {
"Section Id" "Section Id"
sectionId: String! sectionId: String!
"Achievement type" "Achievement type"
type: String! medalType: String
} }
type StatisticsDifferenceItemOfDecimal { type StatisticsDifferenceItemOfDecimal {
@@ -16,6 +16,6 @@ namespace WotBlitzStatisticsPro.Common.Model
/// <summary> /// <summary>
/// Player Achievements by sections /// Player Achievements by sections
/// </summary> /// </summary>
public List<AchievementSection>? AchievementSections { get; set; } public List<AchievementSection>? Sections { get; set; }
} }
} }
@@ -58,7 +58,7 @@
/// <summary> /// <summary>
/// Achievement type /// Achievement type
/// </summary> /// </summary>
public string Type { get; set; } = string.Empty; public string? MedalType { get; set; }
} }
} }
@@ -25,6 +25,6 @@ namespace WotBlitzStatisticsPro.Common.Model.Achievements
/// <summary> /// <summary>
/// Achievements in the section /// Achievements in the section
/// </summary> /// </summary>
public List<Achievement>? Achievements { get; set; } public List<Achievement>? Medals { get; set; }
} }
} }
@@ -21,7 +21,7 @@ namespace WotBlitzStatisticsPro.GraphQl.Query
/// <param name="realmType">Account region</param> /// <param name="realmType">Account region</param>
/// <param name="accountId">AccountId</param> /// <param name="accountId">AccountId</param>
/// <param name="requestLanguage">Request language</param> /// <param name="requestLanguage">Request language</param>
public Task<AccountAchievementsResponse> GetAccountAchievements( public Task<AccountAchievementsResponse> AccountMedals(
long accountId, long accountId,
RealmType? realmType, RealmType? realmType,
RequestLanguage? requestLanguage) RequestLanguage? requestLanguage)
@@ -36,7 +36,7 @@ namespace WotBlitzStatisticsPro.GraphQl.Query
/// <param name="realmType">Account region</param> /// <param name="realmType">Account region</param>
/// <param name="accountId">AccountId</param> /// <param name="accountId">AccountId</param>
/// <param name="requestLanguage">Request language</param> /// <param name="requestLanguage">Request language</param>
public Task<AccountAchievementsResponse> GetTankAchievements( public Task<AccountAchievementsResponse> TankMedals(
long accountId, long accountId,
long tankId, long tankId,
RealmType? realmType, RealmType? realmType,
@@ -54,6 +54,8 @@ namespace WotBlitzStatisticsPro.Logic.Mappers
.ForMember(d => d.Id, o => o.Ignore()) .ForMember(d => d.Id, o => o.Ignore())
.ForMember(d => d.AchievementValue, o => o.Ignore()) .ForMember(d => d.AchievementValue, o => o.Ignore())
.ForMember(d => d.MaxSeriesValue, s => s.Ignore()) .ForMember(d => d.MaxSeriesValue, s => s.Ignore())
.ForMember(d => d.MedalType,
o => o.MapFrom(s => s.Type))
; ;
} }
} }
@@ -81,7 +81,7 @@ namespace WotBlitzStatisticsPro.Logic
var response = new AccountAchievementsResponse var response = new AccountAchievementsResponse
{ {
AccountId = accountId, AccountId = accountId,
AchievementSections = sections Sections = sections
}; };
if (wgAchievements?.Achievements == null) if (wgAchievements?.Achievements == null)
@@ -138,9 +138,9 @@ namespace WotBlitzStatisticsPro.Logic
} }
// Sort achievements by sections // Sort achievements by sections
foreach (var section in response.AchievementSections) foreach (var section in response.Sections)
{ {
section.Achievements = achievements.Where(a => a.SectionId == section.SectionId).ToList(); section.Medals = achievements.Where(a => a.SectionId == section.SectionId).ToList();
} }
return response; return response;