From d643c323b37535c79b4cf2299d9a80a1563b3119 Mon Sep 17 00:00:00 2001 From: Mikhail Shabanov Date: Thu, 12 Mar 2020 19:44:41 +0100 Subject: [PATCH] Clan info with caching --- .../ObjectTypes/PlayerClanInfoObjectType.cs | 20 +++++++++++++------ WotBlitzStatistics.GraphQl/Startup.cs | 3 +++ .../WotBlitzStatistics.GraphQl.csproj | 10 ++++++---- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/WotBlitzStatistics.GraphQl/ObjectTypes/PlayerClanInfoObjectType.cs b/WotBlitzStatistics.GraphQl/ObjectTypes/PlayerClanInfoObjectType.cs index 3650d20..b4ccdfc 100644 --- a/WotBlitzStatistics.GraphQl/ObjectTypes/PlayerClanInfoObjectType.cs +++ b/WotBlitzStatistics.GraphQl/ObjectTypes/PlayerClanInfoObjectType.cs @@ -1,4 +1,7 @@ -using HotChocolate.Types; +using System.Threading; +using GreenDonut; +using HotChocolate.Resolvers; +using HotChocolate.Types; using WotBlitzStatisticsPro.WgApiClient; using WotBlitzStatisticsPro.WgApiClient.Model; @@ -10,10 +13,15 @@ namespace WotBlitzStatistics.GraphQl.ObjectTypes { // ToDo: Cache clan info! // https://hotchocolate.io/docs/dataloaders - descriptor.Field("clanInfo") - .Resolver(c => c.Service() - .GetClanInfo(c.Parent().ClanId.Value)); - - } + descriptor.Field("clanInfo") + .Resolver(c => + { + var warGamingClient = c.Service(); + var clanDataLoader = c.CacheDataLoader( + "clanInfoById", + clanId => warGamingClient.GetClanInfo(clanId)); + return clanDataLoader.LoadAsync(c.Parent().ClanId.Value); + }); + } } } diff --git a/WotBlitzStatistics.GraphQl/Startup.cs b/WotBlitzStatistics.GraphQl/Startup.cs index 017a79a..82c6d7c 100644 --- a/WotBlitzStatistics.GraphQl/Startup.cs +++ b/WotBlitzStatistics.GraphQl/Startup.cs @@ -30,6 +30,9 @@ namespace WotBlitzStatistics.GraphQl services.AddSingleton(wgApiConfig); services.AddHttpClient(); + // this enables you to use DataLoader in your resolvers. + services.AddDataLoaderRegistry(); + // Add GraphQL Services services.AddGraphQL(sp => SchemaBuilder.New() .AddServices(sp) diff --git a/WotBlitzStatistics.GraphQl/WotBlitzStatistics.GraphQl.csproj b/WotBlitzStatistics.GraphQl/WotBlitzStatistics.GraphQl.csproj index 0ae6de8..b55e7bc 100644 --- a/WotBlitzStatistics.GraphQl/WotBlitzStatistics.GraphQl.csproj +++ b/WotBlitzStatistics.GraphQl/WotBlitzStatistics.GraphQl.csproj @@ -5,10 +5,12 @@ - - - - + + + + + +