Rethinking the API

This commit is contained in:
Mikhail Shabanov committed 2020-04-14 11:16:51 +02:00
1 parent 83628d21bd
commit a4b3ae96fd
11 files changed
+127 -16

No files matched your search

@@ -0,0 +1,10 @@
using HotChocolate.Types;
using WotBlitzStatisticsPro.Common.Model;
namespace WotBlitzStatistics.GraphQl.ObjectTypes
{
public class AccountsSearchItemObjectType: ObjectType<AccountsSearchResponseItem>
{
}
}
@@ -0,0 +1,39 @@
using HotChocolate.Types;
using HotChocolate.Types.Relay;
using WotBlitzStatisticsPro.Common.Model;
namespace WotBlitzStatistics.GraphQl.ObjectTypes
{
public class AccountsSearchObjectType: ObjectType<AccountsSearchResponse>
{
// ToDo: This is just for history. We don't need to paginate this because each page request does the request to API.
// The database driver can optimize this and will request data page by page
//protected override void Configure(IObjectTypeDescriptor<AccountsSearchResponse> descriptor)
//{
// descriptor.Field(r => r.Accounts)
// .UsePaging<AccountsSearchItemObjectType>();
//}
/*
Paging request example
query($accountSearchNick: String!) {
findAccounts(accountNick: $accountSearchNick) {
accounts(first: 5, after: "eyJfX3RvdGFsQ291bnQiOjc0LCJfX3Bvc2l0aW9uIjo5fQ==") {
pageInfo {
hasNextPage
hasPreviousPage
startCursor
endCursor
}
totalCount
nodes {
accountId
nickname
}
}
}
}
*/
}
}
@@ -1,7 +1,7 @@
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Threading.Tasks;
using WotBlitzStatisticsPro.Common.Model;
using WotBlitzStatisticsPro.WgApiClient;
using WotBlitzStatisticsPro.WgApiClient.Model;
namespace WotBlitzStatistics.GraphQl.Query
{
@@ -14,9 +14,22 @@ namespace WotBlitzStatistics.GraphQl.Query
_wargamingApiClient = wargamingApiClient;
}
public Task<AccountInfo> GetPlayerInfo(long accountId)
//public Task<AccountInfo> GetPlayerInfo(long accountId)
//{
// return _wargamingApiClient.GetPlayerAccountInfo(accountId);
//}
public async Task<AccountsSearchResponse> FindAccounts(string accountNick)
{
return _wargamingApiClient.GetPlayerAccountInfo(accountId);
var response = await _wargamingApiClient.FindAccounts(accountNick);
// ToDo: Use auto mapper
var result = new AccountsSearchResponse
{
AccountsCount = response.Count,
Accounts = new List<AccountsSearchResponseItem>()
};
response.ForEach(r => result.Accounts.Add(new AccountsSearchResponseItem {AccountId = r.AccountId.Value, Nickname = r.Nickname}));
return result;
}
}
}
+4 -5
View File
@@ -32,7 +32,9 @@ namespace WotBlitzStatistics.GraphQl
services.AddHttpClient<IWargamingApiClient, WargamingApiClient>();
// Global data loader - caches data between requests
// ToDo: cause nullreference exception
//services.AddSingleton<IDataLoaderRegistry, DataLoaderRegistry>();
// this enables you to use DataLoader in your resolvers.
services.AddDataLoaderRegistry();
@@ -47,11 +49,8 @@ namespace WotBlitzStatistics.GraphQl
.AddQueryType<WotBlitzStatisticsQuery>()
//.AddMutationType<MutationType>()
//.AddSubscriptionType<SubscriptionType>()
.AddType<PlayerAccountInfoObjectType>()
.AddType<AccountStatistics>()
.AddType<AccountFullStatistics>()
.AddType<PlayerClanInfoObjectType>()
.AddType<ClanInfoObjectType>()
.AddType<AccountsSearchItemObjectType>()
.AddType<AccountsSearchObjectType>()
//.AddEnumType<MarkOfMastery>()
.Create());
}
@@ -15,6 +15,7 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\WotBlitzStatisticsPro.Common\WotBlitzStatisticsPro.Common.csproj" />
<ProjectReference Include="..\WotBlitzStatisticsPro.WgApiClient\WotBlitzStatisticsPro.WgApiClient.csproj" />
</ItemGroup>