Browse Source

Fully async

pull/65/head
Sebastian Stehle 9 years ago
parent
commit
b24078ff75
  1. 4
      src/Squidex.Domain.Apps.Read/Contents/GraphQL/GraphQLModel.cs
  2. 24
      src/Squidex.Domain.Apps.Read/Contents/GraphQL/QueryContext.cs

4
src/Squidex.Domain.Apps.Read/Contents/GraphQL/GraphQLModel.cs

@ -103,7 +103,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL
var context = (QueryContext)c.UserContext;
var contentIds = c.Source.GetOrDefault(c.FieldName);
return context.GetReferencedAssets(contentIds);
return context.GetReferencedAssetsAsync(contentIds);
});
return (assetListType, resolver);
@ -124,7 +124,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL
var context = (QueryContext)c.UserContext;
var contentIds = c.Source.GetOrDefault(c.FieldName);
return context.GetReferencedContents(schemaId, contentIds);
return context.GetReferencedContentsAsync(schemaId, contentIds);
});
var schemaFieldType = new ListGraphType(new NonNullGraphType(GetSchemaType(schemaId)));

24
src/Squidex.Domain.Apps.Read/Contents/GraphQL/QueryContext.cs

@ -48,7 +48,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL
if (asset == null)
{
asset = await assetRepository.FindAssetAsync(id);
asset = await assetRepository.FindAssetAsync(id).ConfigureAwait(false);
if (asset != null)
{
@ -65,7 +65,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL
if (content == null)
{
content = await contentRepository.FindContentAsync(app, schemaId, id);
content = await contentRepository.FindContentAsync(app, schemaId, id).ConfigureAwait(false);
if (content != null)
{
@ -90,7 +90,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL
public async Task<IReadOnlyList<IContentEntity>> QueryContentsAsync(Guid schemaId, string query)
{
var contents = await contentRepository.QueryAsync(app, schemaId, false, null, query);
var contents = await contentRepository.QueryAsync(app, schemaId, false, null, query).ConfigureAwait(false);
foreach (var content in contents)
{
@ -100,22 +100,20 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL
return contents;
}
public List<IAssetEntity> GetReferencedAssets(JToken value)
public Task<IReadOnlyList<IAssetEntity>> GetReferencedAssetsAsync(JToken value)
{
var ids = ParseIds(value);
return GetReferencedAssets(ids);
return GetReferencedAssetsAsync(ids);
}
public List<IAssetEntity> GetReferencedAssets(ICollection<Guid> ids)
public async Task<IReadOnlyList<IAssetEntity>> GetReferencedAssetsAsync(ICollection<Guid> ids)
{
Guard.NotNull(ids, nameof(ids));
var notLoadedAssets = new HashSet<Guid>(ids.Where(id => !cachedAssets.ContainsKey(id)));
if (notLoadedAssets.Count > 0)
{
Task.Run(async () =>
{
var assets = await assetRepository.QueryAsync(app.Id, null, notLoadedAssets, null, int.MaxValue).ConfigureAwait(false);
@ -123,28 +121,25 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL
{
cachedAssets[asset.Id] = asset;
}
}).Wait();
}
return ids.Select(id => cachedAssets.GetOrDefault(id)).Where(x => x != null).ToList();
}
public List<IContentEntity> GetReferencedContents(Guid schemaId, JToken value)
public Task<IReadOnlyList<IContentEntity>> GetReferencedContentsAsync(Guid schemaId, JToken value)
{
var ids = ParseIds(value);
return GetReferencedContents(schemaId, ids);
return GetReferencedContentsAsync(schemaId, ids);
}
public List<IContentEntity> GetReferencedContents(Guid schemaId, ICollection<Guid> ids)
public async Task<IReadOnlyList<IContentEntity>> GetReferencedContentsAsync(Guid schemaId, ICollection<Guid> ids)
{
Guard.NotNull(ids, nameof(ids));
var notLoadedContents = new HashSet<Guid>(ids.Where(id => !cachedContents.ContainsKey(id)));
if (notLoadedContents.Count > 0)
{
Task.Run(async () =>
{
var contents = await contentRepository.QueryAsync(app, schemaId, false, notLoadedContents, null).ConfigureAwait(false);
@ -152,7 +147,6 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL
{
cachedContents[content.Id] = content;
}
}).Wait();
}
return ids.Select(id => cachedContents.GetOrDefault(id)).Where(x => x != null).ToList();

Loading…
Cancel
Save