From fecb3d7d44096ba83d7c074161a2f3cb09293b07 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Fri, 4 Nov 2022 14:05:20 +0100 Subject: [PATCH] Fix OpenAPI for version endpoint and introduce new endpoint. --- .../Contents/ContentsController.cs | 42 ++++++++++++++++++- .../Generator/SchemasOpenApiGenerator.cs | 8 ++++ 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs b/backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs index d9865c2eb..366a24738 100644 --- a/backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs +++ b/backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs @@ -218,6 +218,41 @@ namespace Squidex.Areas.Api.Controllers.Contents return Ok(response); } + /// + /// Get a content by version V2. + /// + /// The name of the app. + /// The name of the schema. + /// The ID of the content to fetch. + /// The version fo the content to fetch. + /// + /// 200 => Content version returned. + /// 404 => Content, schema or app not found. + /// + /// + /// You can read the generated documentation for your app at /api/content/{appName}/docs. + /// + [HttpGet] + [Route("content/{app}/{schema}/{id}/v/{version}/")] + [ApiPermissionOrAnonymous(PermissionIds.AppContentsReadOwn)] + [ApiCosts(1)] + public async Task GetContentVersionV2(string app, string schema, DomainId id, int version) + { + var content = await contentQuery.FindAsync(Context, schema, id, version, HttpContext.RequestAborted); + + if (content == null) + { + return NotFound(); + } + + var response = Deferred.Response(() => + { + return ContentDto.FromDomain(content, Resources); + }); + + return Ok(response); + } + /// /// Get a content by version. /// @@ -245,9 +280,12 @@ namespace Squidex.Areas.Api.Controllers.Contents return NotFound(); } - var response = ContentDto.FromDomain(content, Resources); + var response = Deferred.Response(() => + { + return ContentDto.FromDomain(content, Resources).Data; + }); - return Ok(response.Data); + return Ok(response); } /// diff --git a/backend/src/Squidex/Areas/Api/Controllers/Contents/Generator/SchemasOpenApiGenerator.cs b/backend/src/Squidex/Areas/Api/Controllers/Contents/Generator/SchemasOpenApiGenerator.cs index c3e8d3e93..5202dbfd7 100644 --- a/backend/src/Squidex/Areas/Api/Controllers/Contents/Generator/SchemasOpenApiGenerator.cs +++ b/backend/src/Squidex/Areas/Api/Controllers/Contents/Generator/SchemasOpenApiGenerator.cs @@ -142,6 +142,14 @@ namespace Squidex.Areas.Api.Controllers.Contents.Generator .OperationSummary("Get a [schema] content item by id and version.") .HasPath("version", JsonObjectType.Number, FieldDescriptions.EntityVersion) .HasId() + .Responds(200, "Content item returned.", builder.DataSchema); + + builder.AddOperation(OpenApiOperationMethod.Get, "/{id}/v/{version}") + .RequirePermission(PermissionIds.AppContentsReadOwn) + .Operation("GetVersionedV2") + .OperationSummary("Get a [schema] content item by id and version.") + .HasPath("version", JsonObjectType.Number, FieldDescriptions.EntityVersion) + .HasId() .Responds(200, "Content item returned.", builder.ContentSchema); builder.AddOperation(OpenApiOperationMethod.Get, "/{id}/validity")