Files
WotBlitzStatisticsBlazor/WotBlitzStatisticsPro.Blazor/Services/GraphQlBackendService.cs
T

103 lines
3.6 KiB
C#
Raw Normal View History

using System.Collections.Generic;
2021-05-15 19:47:48 +02:00
using System.Globalization;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
using StrawberryShake;
using WotBlitzStatisticsPro.Blazor.GraphQl;
namespace WotBlitzStatisticsPro.Blazor.Services
{
public class GraphQlBackendService: IGraphQlBackendService
{
private readonly WotBlitzStatisticsProClient _client;
private readonly INotificationsService _notificationsService;
public GraphQlBackendService(
WotBlitzStatisticsProClient client,
INotificationsService notificationsService)
{
_client = client;
_notificationsService = notificationsService;
}
2021-06-04 15:35:53 +02:00
public async Task<IReadOnlyList<IPlayerShortInfo>?> FindPlayers(string accountNick, RealmType realmType)
{
var accounts =
2021-05-15 19:47:48 +02:00
await _client.FindPlayers.ExecuteAsync(accountNick, realmType, GetLanguage());
CheckErrors(accounts.Errors);
return accounts.Data?.Players;
}
2021-06-04 15:35:53 +02:00
public async Task<IReadOnlyList<IClanShortInfo>?> FindClans(string clanNameOrTag, RealmType realmType)
{
var clans =
2021-05-15 19:47:48 +02:00
await _client.FindClans.ExecuteAsync(clanNameOrTag, realmType, GetLanguage());
CheckErrors(clans.Errors);
return clans.Data?.Clans;
}
2021-05-15 19:47:48 +02:00
2021-06-04 15:35:53 +02:00
public async Task<(IAccount accountInfo, IReadOnlyList<ISection> achievementsBySection)> GetPlayerInfo(long accountId, RealmType realmType)
2021-05-28 15:27:36 +02:00
{
var playerInfo = await _client.Player.ExecuteAsync(accountId, realmType, GetLanguage());
CheckErrors(playerInfo.Errors);
return (playerInfo.Data?.AccountInfo, playerInfo.Data?.AccountMedals?.Sections);
2021-05-28 15:27:36 +02:00
}
2021-07-15 11:51:06 +02:00
public Task<string> GetWgLoginUrl(RealmType realmType)
{
throw new System.NotImplementedException("Request for LoginUrl will be implemented soon");
}
2021-05-15 19:47:48 +02:00
private RequestLanguage GetLanguage()
{
var culture = CultureInfo.CurrentCulture;
switch (culture.Name)
{
case "ru-RU":
return RequestLanguage.Ru;
case "de-DE":
return RequestLanguage.De;
default:
return RequestLanguage.En;
}
}
private void CheckErrors(IReadOnlyCollection<IClientError> errors)
{
var messages = new List<string>();
if (errors.Count > 0)
{
foreach (var error in errors)
{
if (error.Extensions != null)
{
foreach (var errorExt in error.Extensions)
{
var serializedError = errorExt.Value;
if (serializedError is string realError)
{
var jObject = JObject.Parse(realError);
var firstErrorInfo = jObject["errors"]?[0];
var message = firstErrorInfo?["extensions"]?["message"];
if (message != null)
{
messages.Add(message.ToString());
}
}
}
}
}
}
if (messages.Count > 0)
{
_notificationsService.ReportError("Backend error",string.Join(";", messages));
}
}
}
}