Browse Source

Fix content version cache.

pull/1038/head
Sebastian 3 years ago
parent
commit
445cbbbc3c
  1. 4
      backend/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Cache/CachingBatchLoader.cs
  2. 4
      backend/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/GraphQLExecutionContext.cs
  3. 48
      tools/TestSuite/TestSuite.ApiTests/GraphQLTests.cs

4
backend/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Cache/CachingBatchLoader.cs

@ -21,11 +21,11 @@ internal class CachingBatchDataLoader<TKey, T> : DataLoaderBase<CacheableId<TKey
private readonly IQueryCache<TKey, T> queryCache;
private readonly Func<IEnumerable<TKey>, CancellationToken, Task<IDictionary<TKey, T>>> queryDelegate;
public CachingBatchDataLoader(IQueryCache<TKey, T> queryStore,
public CachingBatchDataLoader(IQueryCache<TKey, T> queryCache,
Func<IEnumerable<TKey>, CancellationToken, Task<IDictionary<TKey, T>>> queryDelegate, bool canCache = true, int maxBatchSize = int.MaxValue)
: base(canCache, maxBatchSize)
{
this.queryCache = queryStore;
this.queryCache = queryCache;
this.queryDelegate = queryDelegate;
}

4
backend/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/GraphQLExecutionContext.cs

@ -77,7 +77,9 @@ public sealed class GraphQLExecutionContext : QueryExecutionContext
public IDataLoaderResult<IEnrichedContentEntity?> GetContent(DomainId schemaId, DomainId id, long version)
{
return dataLoaders.Context!.GetOrAddLoader(nameof(GetContent), ct =>
var cacheKey = $"{nameof(GetContent)}_{schemaId}_{id}_{version}";
return dataLoaders.Context!.GetOrAddLoader(cacheKey, ct =>
{
return FindContentAsync(schemaId.ToString(), id, version, ct);
}).LoadAsync();

48
tools/TestSuite/TestSuite.ApiTests/GraphQLTests.cs

@ -47,13 +47,17 @@ public sealed class GraphQLTests : IClassFixture<GraphQLFixture>
var query = new
{
query = @"
{
findMyWritesContent(id: ""<ID>"") {
query ContentsQuery($id: String!) {
findMyWritesContent(id: $id) {
flatData {
json
}
}
}".Replace("<ID>", content_0.Id, StringComparison.Ordinal)
}",
variables = new
{
id = content_0.Id,
}
};
var result = await _.Client.SharedDynamicContents.GraphQlAsync<JToken>(query);
@ -390,6 +394,44 @@ public sealed class GraphQLTests : IClassFixture<GraphQLFixture>
Assert.Equal(new[] { "Bavaria", "Leipzig", "Munich", "Saxony" }, names);
}
[Fact]
public async Task Should_query_multiple_items_with_separate_queries()
{
var allCities = await _.Cities.GetAsync();
var query = new
{
query = @"
query ContentsQuery($id1: String!, $id2: String!) {
a: findCitiesContent(id: $id1, version: 0) {
id,
flatData {
name
}
},
b: findCitiesContent(id: $id2, version: 0) {
id,
flatData {
name
}
}
}",
variables = new
{
id1 = allCities.Items[0].Id,
id2 = allCities.Items[1].Id,
}
};
var result = await _.Client.SharedDynamicContents.GraphQlAsync<JToken>(query);
var city1Id = result["a"]["id"].ToString();
var city2Id = result["b"]["id"].ToString();
Assert.Equal(allCities.Items[0].Id, city1Id);
Assert.Equal(allCities.Items[1].Id, city2Id);
}
[Fact]
public async Task Should_return_correct_vary_headers()
{

Loading…
Cancel
Save