From 75e0e36617d25907a4decdd9a2f1e0046699e9d6 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Mon, 24 Aug 2020 10:18:17 +0200 Subject: [PATCH] GraphQL GET endpoint fixed. --- .../Assets/AssetContentController.cs | 30 ++++++++--------- .../Contents/ContentsController.cs | 32 +++++++++++++++++-- 2 files changed, 45 insertions(+), 17 deletions(-) diff --git a/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs b/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs index 9ee8ac023..b63863cbc 100644 --- a/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs +++ b/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs @@ -60,7 +60,7 @@ namespace Squidex.Areas.Api.Controllers.Assets /// The name of the app. /// The id or slug of the asset. /// Optional suffix that can be used to seo-optimize the link to the image Has not effect. - /// The query string parameters. + /// The query string parameters. /// /// 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 GetAssetContentBySlug(string app, string idOrSlug, string more, [FromQuery] AssetContentQueryDto query) + public async Task 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); } /// /// Get the asset content. /// /// The id of the asset. - /// The query string parameters. + /// The query string parameters. /// /// 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 GetAssetContent(Guid id, [FromQuery] AssetContentQueryDto query) + public async Task 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 DeliverAssetAsync(IAssetEntity? asset, AssetContentQueryDto query) + private async Task 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 }; } diff --git a/backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs b/backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs index 32daf8efb..7c5f30c0f 100644 --- a/backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs +++ b/backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs @@ -43,7 +43,7 @@ namespace Squidex.Areas.Api.Controllers.Contents /// GraphQL endpoint. /// /// The name of the app. - /// The graphql query. + /// The graphql query. /// /// 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. /// [HttpGet] + [Route("content/{app}/graphql/")] + [ApiPermission] + [ApiCosts(2)] + public async Task 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); + } + } + + /// + /// GraphQL endpoint. + /// + /// The name of the app. + /// The graphql query. + /// + /// 200 => Contents retrieved or mutated. + /// 404 => Schema or app not found. + /// + /// + /// You can read the generated documentation for your app at /api/content/{appName}/docs. + /// [HttpPost] [Route("content/{app}/graphql/")] [ApiPermission] @@ -82,7 +111,6 @@ namespace Squidex.Areas.Api.Controllers.Contents /// /// You can read the generated documentation for your app at /api/content/{appName}/docs. /// - [HttpGet] [HttpPost] [Route("content/{app}/graphql/batch")] [ApiPermission]