Browse Source

GraphQL GET endpoint fixed.

pull/566/head
Sebastian 5 years ago
parent
commit
75e0e36617
  1. 30
      backend/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs
  2. 32
      backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs

30
backend/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs

@ -60,7 +60,7 @@ namespace Squidex.Areas.Api.Controllers.Assets
/// <param name="app">The name of the app.</param>
/// <param name="idOrSlug">The id or slug of the asset.</param>
/// <param name="more">Optional suffix that can be used to seo-optimize the link to the image Has not effect.</param>
/// <param name="query">The query string parameters.</param>
/// <param name="queries">The query string parameters.</param>
/// <returns>
/// 200 => Asset found and content or (resized) image returned.
/// 404 => Asset or app not found.
@ -71,7 +71,7 @@ namespace Squidex.Areas.Api.Controllers.Assets
[ApiPermission]
[ApiCosts(0.5)]
[AllowAnonymous]
public async Task<IActionResult> GetAssetContentBySlug(string app, string idOrSlug, string more, [FromQuery] AssetContentQueryDto query)
public async Task<IActionResult> GetAssetContentBySlug(string app, string idOrSlug, string more, [FromQuery] AssetContentQueryDto queries)
{
IAssetEntity? asset;
@ -84,14 +84,14 @@ namespace Squidex.Areas.Api.Controllers.Assets
asset = await assetRepository.FindAssetBySlugAsync(App.Id, idOrSlug);
}
return await DeliverAssetAsync(asset, query);
return await DeliverAssetAsync(asset, queries);
}
/// <summary>
/// Get the asset content.
/// </summary>
/// <param name="id">The id of the asset.</param>
/// <param name="query">The query string parameters.</param>
/// <param name="queries">The query string parameters.</param>
/// <returns>
/// 200 => Asset found and content or (resized) image returned.
/// 404 => Asset or app not found.
@ -102,16 +102,16 @@ namespace Squidex.Areas.Api.Controllers.Assets
[ApiPermission]
[ApiCosts(0.5)]
[AllowAnonymous]
public async Task<IActionResult> GetAssetContent(Guid id, [FromQuery] AssetContentQueryDto query)
public async Task<IActionResult> GetAssetContent(Guid id, [FromQuery] AssetContentQueryDto queries)
{
var asset = await assetRepository.FindAssetAsync(id);
return await DeliverAssetAsync(asset, query);
return await DeliverAssetAsync(asset, queries);
}
private async Task<IActionResult> DeliverAssetAsync(IAssetEntity? asset, AssetContentQueryDto query)
private async Task<IActionResult> DeliverAssetAsync(IAssetEntity? asset, AssetContentQueryDto queries)
{
query ??= new AssetContentQueryDto();
queries ??= new AssetContentQueryDto();
if (asset == null)
{
@ -123,20 +123,20 @@ namespace Squidex.Areas.Api.Controllers.Assets
return StatusCode(403);
}
if (query.Version > EtagVersion.Any && asset.Version != query.Version)
if (queries.Version > EtagVersion.Any && asset.Version != queries.Version)
{
asset = await assetLoader.GetAsync(asset.Id, query.Version);
asset = await assetLoader.GetAsync(asset.Id, queries.Version);
}
var resizeOptions = query.ToResizeOptions(asset);
var resizeOptions = queries.ToResizeOptions(asset);
FileCallback callback;
Response.Headers[HeaderNames.ETag] = asset.FileVersion.ToString();
if (query.CacheDuration > 0)
if (queries.CacheDuration > 0)
{
Response.Headers[HeaderNames.CacheControl] = $"public,max-age={query.CacheDuration}";
Response.Headers[HeaderNames.CacheControl] = $"public,max-age={queries.CacheDuration}";
}
var contentLength = (long?)null;
@ -147,7 +147,7 @@ namespace Squidex.Areas.Api.Controllers.Assets
{
var resizedAsset = $"{asset.Id}_{asset.FileVersion}_{resizeOptions}";
if (query.ForceResize)
if (queries.ForceResize)
{
await ResizeAsync(asset, bodyStream, resizedAsset, resizeOptions, true, ct);
}
@ -181,7 +181,7 @@ namespace Squidex.Areas.Api.Controllers.Assets
FileDownloadName = asset.FileName,
FileSize = contentLength,
LastModified = asset.LastModified.ToDateTimeOffset(),
SendInline = query.Download != 1
SendInline = queries.Download != 1
};
}

32
backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs

@ -43,7 +43,7 @@ namespace Squidex.Areas.Api.Controllers.Contents
/// GraphQL endpoint.
/// </summary>
/// <param name="app">The name of the app.</param>
/// <param name="query">The graphql query.</param>
/// <param name="queries">The graphql query.</param>
/// <returns>
/// 200 => Contents retrieved or mutated.
/// 404 => Schema or app not found.
@ -52,6 +52,35 @@ namespace Squidex.Areas.Api.Controllers.Contents
/// You can read the generated documentation for your app at /api/content/{appName}/docs.
/// </remarks>
[HttpGet]
[Route("content/{app}/graphql/")]
[ApiPermission]
[ApiCosts(2)]
public async Task<IActionResult> GetGraphQL(string app, [FromQuery] GraphQLQuery? queries = null)
{
var (hasError, response) = await graphQl.QueryAsync(Context, queries ?? new GraphQLQuery());
if (hasError)
{
return BadRequest(response);
}
else
{
return Ok(response);
}
}
/// <summary>
/// GraphQL endpoint.
/// </summary>
/// <param name="app">The name of the app.</param>
/// <param name="query">The graphql query.</param>
/// <returns>
/// 200 => Contents retrieved or mutated.
/// 404 => Schema or app not found.
/// </returns>
/// <remarks>
/// You can read the generated documentation for your app at /api/content/{appName}/docs.
/// </remarks>
[HttpPost]
[Route("content/{app}/graphql/")]
[ApiPermission]
@ -82,7 +111,6 @@ namespace Squidex.Areas.Api.Controllers.Contents
/// <remarks>
/// You can read the generated documentation for your app at /api/content/{appName}/docs.
/// </remarks>
[HttpGet]
[HttpPost]
[Route("content/{app}/graphql/batch")]
[ApiPermission]

Loading…
Cancel
Save