From d8cf3b5b43468d5143e6ba4e99791e8e0dacf358 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Fri, 12 Mar 2021 09:05:18 +0100 Subject: [PATCH] Docs fixed (#672) --- .../Assets/AssetContentController.cs | 32 +++++----- .../Assets/AssetFoldersController.cs | 12 ++-- .../Controllers/Assets/AssetsController.cs | 31 +++------- .../Assets/Models/CreateAssetDto.cs | 60 +++++++++++++++++++ .../Assets/Models/UpsertAssetDto.cs | 47 +++++++++++++++ .../Comments/CommentsController.cs | 4 +- .../UserNotificationsController.cs | 2 +- .../Schemas/SchemaFieldsController.cs | 4 +- 8 files changed, 142 insertions(+), 50 deletions(-) create mode 100644 backend/src/Squidex/Areas/Api/Controllers/Assets/Models/CreateAssetDto.cs create mode 100644 backend/src/Squidex/Areas/Api/Controllers/Assets/Models/UpsertAssetDto.cs diff --git a/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs b/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs index fb2f3128a..f8089380b 100644 --- a/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs +++ b/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs @@ -61,7 +61,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 request parameters. /// /// 200 => Asset found and content or (resized) image returned. /// 404 => Asset or app not found. @@ -72,7 +72,7 @@ namespace Squidex.Areas.Api.Controllers.Assets [ApiPermission] [ApiCosts(0.5)] [AllowAnonymous] - public async Task GetAssetContentBySlug(string app, string idOrSlug, [FromQuery] AssetContentQueryDto queries, string? more = null) + public async Task GetAssetContentBySlug(string app, string idOrSlug, AssetContentQueryDto request, string? more = null) { var requestContext = Context.Clone(b => b.WithoutAssetEnrichment()); @@ -83,14 +83,14 @@ namespace Squidex.Areas.Api.Controllers.Assets asset = await assetQuery.FindBySlugAsync(requestContext, idOrSlug); } - return await DeliverAssetAsync(requestContext, asset, queries); + return await DeliverAssetAsync(requestContext, asset, request); } /// /// Get the asset content. /// /// The id of the asset. - /// The query string parameters. + /// The request parameters. /// /// 200 => Asset found and content or (resized) image returned. /// 404 => Asset or app not found. @@ -102,18 +102,18 @@ namespace Squidex.Areas.Api.Controllers.Assets [ApiCosts(0.5)] [AllowAnonymous] [Obsolete("Use overload with app name")] - public async Task GetAssetContent(DomainId id, [FromQuery] AssetContentQueryDto queries) + public async Task GetAssetContent(DomainId id, AssetContentQueryDto request) { var requestContext = Context.Clone(b => b.WithoutAssetEnrichment()); var asset = await assetQuery.FindGlobalAsync(requestContext, id); - return await DeliverAssetAsync(requestContext, asset, queries); + return await DeliverAssetAsync(requestContext, asset, request); } - private async Task DeliverAssetAsync(Context context, IAssetEntity? asset, AssetContentQueryDto queries) + private async Task DeliverAssetAsync(Context context, IAssetEntity? asset, AssetContentQueryDto request) { - queries ??= new AssetContentQueryDto(); + request ??= new AssetContentQueryDto(); if (asset == null) { @@ -127,16 +127,16 @@ namespace Squidex.Areas.Api.Controllers.Assets return StatusCode(403); } - if (asset != null && queries.Version > EtagVersion.Any && asset.Version != queries.Version) + if (asset != null && request.Version > EtagVersion.Any && asset.Version != request.Version) { if (context.App != null) { - asset = await assetQuery.FindAsync(context, asset.Id, queries.Version); + asset = await assetQuery.FindAsync(context, asset.Id, request.Version); } else { // Fallback for old endpoint. Does not set the surrogate key. - asset = await assetLoader.GetAsync(asset.AppId.Id, asset.Id, queries.Version); + asset = await assetLoader.GetAsync(asset.AppId.Id, asset.Id, request.Version); } } @@ -145,15 +145,15 @@ namespace Squidex.Areas.Api.Controllers.Assets return NotFound(); } - var resizeOptions = queries.ToResizeOptions(asset); + var resizeOptions = request.ToResizeOptions(asset); FileCallback callback; Response.Headers[HeaderNames.ETag] = asset.FileVersion.ToString(); - if (queries.CacheDuration > 0) + if (request.CacheDuration > 0) { - Response.Headers[HeaderNames.CacheControl] = $"public,max-age={queries.CacheDuration}"; + Response.Headers[HeaderNames.CacheControl] = $"public,max-age={request.CacheDuration}"; } var contentLength = (long?)null; @@ -164,7 +164,7 @@ namespace Squidex.Areas.Api.Controllers.Assets { var resizedAsset = $"{asset.AppId.Id}_{asset.Id}_{asset.FileVersion}_{resizeOptions}"; - if (queries.ForceResize) + if (request.ForceResize) { await ResizeAsync(asset, bodyStream, resizedAsset, resizeOptions, true, ct); } @@ -198,7 +198,7 @@ namespace Squidex.Areas.Api.Controllers.Assets FileDownloadName = asset.FileName, FileSize = contentLength, LastModified = asset.LastModified.ToDateTimeOffset(), - SendInline = queries.Download != 1 + SendInline = request.Download != 1 }; } diff --git a/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetFoldersController.cs b/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetFoldersController.cs index d2946bd01..b477f991a 100644 --- a/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetFoldersController.cs +++ b/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetFoldersController.cs @@ -68,7 +68,7 @@ namespace Squidex.Areas.Api.Controllers.Assets } /// - /// Upload a new asset. + /// Create an asset folder. /// /// The name of the app. /// The asset folder object that needs to be added to the App. @@ -79,7 +79,7 @@ namespace Squidex.Areas.Api.Controllers.Assets /// [HttpPost] [Route("apps/{app}/assets/folders", Order = -1)] - [ProducesResponseType(typeof(AssetDto), 201)] + [ProducesResponseType(typeof(AssetFolderDto), 201)] [AssetRequestSizeLimit] [ApiPermissionOrAnonymous(Permissions.AppAssetsUpdate)] [ApiCosts(1)] @@ -93,7 +93,7 @@ namespace Squidex.Areas.Api.Controllers.Assets } /// - /// Updates the asset folder. + /// Update an asset folder. /// /// The name of the app. /// The id of the asset folder. @@ -105,7 +105,7 @@ namespace Squidex.Areas.Api.Controllers.Assets /// [HttpPut] [Route("apps/{app}/assets/folders/{id}/", Order = -1)] - [ProducesResponseType(typeof(AssetDto), StatusCodes.Status200OK)] + [ProducesResponseType(typeof(AssetFolderDto), StatusCodes.Status200OK)] [AssetRequestSizeLimit] [ApiPermissionOrAnonymous(Permissions.AppAssetsUpdate)] [ApiCosts(1)] @@ -119,7 +119,7 @@ namespace Squidex.Areas.Api.Controllers.Assets } /// - /// Moves the asset folder. + /// Move an asset folder. /// /// The name of the app. /// The id of the asset folder. @@ -131,7 +131,7 @@ namespace Squidex.Areas.Api.Controllers.Assets /// [HttpPut] [Route("apps/{app}/assets/folders/{id}/parent", Order = -1)] - [ProducesResponseType(typeof(AssetDto), StatusCodes.Status200OK)] + [ProducesResponseType(typeof(AssetFolderDto), StatusCodes.Status200OK)] [AssetRequestSizeLimit] [ApiPermissionOrAnonymous(Permissions.AppAssetsUpdate)] [ApiCosts(1)] diff --git a/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetsController.cs b/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetsController.cs index eb0385bd4..13f9e978d 100644 --- a/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetsController.cs +++ b/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetsController.cs @@ -172,10 +172,7 @@ namespace Squidex.Areas.Api.Controllers.Assets /// Upload a new asset. /// /// The name of the app. - /// The optional parent folder id. - /// The file to upload. - /// The optional custom asset id. - /// True to duplicate the asset, event if the file has been uploaded. + /// The request parameters. /// /// 201 => Asset created. /// 400 => Asset request not valid. @@ -191,16 +188,9 @@ namespace Squidex.Areas.Api.Controllers.Assets [AssetRequestSizeLimit] [ApiPermissionOrAnonymous(Permissions.AppAssetsCreate)] [ApiCosts(1)] - public async Task PostAsset(string app, [FromQuery] DomainId parentId, IFormFile file, [FromQuery] DomainId? id = null, [FromQuery] bool duplicate = false) + public async Task PostAsset(string app, CreateAssetDto request) { - var assetFile = await CheckAssetFileAsync(file); - - var command = new CreateAsset { File = assetFile, ParentId = parentId, Duplicate = duplicate }; - - if (id != null && id.Value != default && !string.IsNullOrWhiteSpace(id.Value.ToString())) - { - command.AssetId = id.Value; - } + var command = request.ToCommand(await CheckAssetFileAsync(request.File)); var response = await InvokeCommandAsync(command); @@ -238,9 +228,8 @@ namespace Squidex.Areas.Api.Controllers.Assets /// Upsert an asset. /// /// The name of the app. - /// The optional parent folder id. - /// The file to upload. /// The optional custom asset id. + /// The request parameters. /// /// 200 => Asset created or updated. /// 400 => Asset request not valid. @@ -256,11 +245,9 @@ namespace Squidex.Areas.Api.Controllers.Assets [AssetRequestSizeLimit] [ApiPermissionOrAnonymous(Permissions.AppAssetsCreate)] [ApiCosts(1)] - public async Task PostUpsertAsset(string app, DomainId id, [FromQuery] DomainId? parentId, IFormFile file) + public async Task PostUpsertAsset(string app, DomainId id, UpsertAssetDto request) { - var assetFile = await CheckAssetFileAsync(file); - - var command = new UpsertAsset { File = assetFile, ParentId = parentId, AssetId = id }; + var command = request.ToCommand(id, await CheckAssetFileAsync(request.File)); var response = await InvokeCommandAsync(command); @@ -289,9 +276,7 @@ namespace Squidex.Areas.Api.Controllers.Assets [ApiCosts(1)] public async Task PutAssetContent(string app, DomainId id, IFormFile file) { - var assetFile = await CheckAssetFileAsync(file); - - var command = new UpdateAsset { File = assetFile, AssetId = id }; + var command = new UpdateAsset { File = await CheckAssetFileAsync(file), AssetId = id }; var response = await InvokeCommandAsync(command); @@ -299,7 +284,7 @@ namespace Squidex.Areas.Api.Controllers.Assets } /// - /// Updates the asset. + /// Update an asset. /// /// The name of the app. /// The id of the asset. diff --git a/backend/src/Squidex/Areas/Api/Controllers/Assets/Models/CreateAssetDto.cs b/backend/src/Squidex/Areas/Api/Controllers/Assets/Models/CreateAssetDto.cs new file mode 100644 index 000000000..987dff51a --- /dev/null +++ b/backend/src/Squidex/Areas/Api/Controllers/Assets/Models/CreateAssetDto.cs @@ -0,0 +1,60 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Squidex.Assets; +using Squidex.Domain.Apps.Entities.Assets.Commands; +using Squidex.Infrastructure; +using Squidex.Infrastructure.Reflection; + +namespace Squidex.Areas.Api.Controllers.Assets.Models +{ + public sealed class CreateAssetDto + { + /// + /// The file to upload. + /// + public IFormFile File { get; set; } + + /// + /// The optional parent folder id. + /// + [FromQuery] + public DomainId ParentId { get; set; } + + /// + /// The optional path to the parent folder. + /// + [FromQuery] + public string? ParentPath { get; set; } + + /// + /// The optional custom asset id. + /// + [FromQuery] + public DomainId? Id { get; set; } + + /// + /// True to duplicate the asset, event if the file has been uploaded. + /// + [FromQuery] + public bool Duplicate { get; set; } + + public CreateAsset ToCommand(AssetFile file) + { + var command = SimpleMapper.Map(this, new CreateAsset { File = file }); + + if (Id != null && Id.Value != default && !string.IsNullOrWhiteSpace(Id.Value.ToString())) + { + command.AssetId = Id.Value; + } + + return command; + } + } +} diff --git a/backend/src/Squidex/Areas/Api/Controllers/Assets/Models/UpsertAssetDto.cs b/backend/src/Squidex/Areas/Api/Controllers/Assets/Models/UpsertAssetDto.cs new file mode 100644 index 000000000..b737bb04a --- /dev/null +++ b/backend/src/Squidex/Areas/Api/Controllers/Assets/Models/UpsertAssetDto.cs @@ -0,0 +1,47 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Squidex.Assets; +using Squidex.Domain.Apps.Entities.Assets.Commands; +using Squidex.Infrastructure; +using Squidex.Infrastructure.Reflection; + +namespace Squidex.Areas.Api.Controllers.Assets.Models +{ + public sealed class UpsertAssetDto + { + /// + /// The file to upload. + /// + public IFormFile File { get; set; } + + /// + /// The optional parent folder id. + /// + [FromQuery] + public DomainId ParentId { get; set; } + + /// + /// The optional path to the parent folder. + /// + [FromQuery] + public string? ParentPath { get; set; } + + /// + /// True to duplicate the asset, event if the file has been uploaded. + /// + [FromQuery] + public bool Duplicate { get; set; } + + public UpsertAsset ToCommand(DomainId id, AssetFile file) + { + return SimpleMapper.Map(this, new UpsertAsset { File = file, AssetId = id }); + } + } +} diff --git a/backend/src/Squidex/Areas/Api/Controllers/Comments/CommentsController.cs b/backend/src/Squidex/Areas/Api/Controllers/Comments/CommentsController.cs index f3f71616b..7cf6909a3 100644 --- a/backend/src/Squidex/Areas/Api/Controllers/Comments/CommentsController.cs +++ b/backend/src/Squidex/Areas/Api/Controllers/Comments/CommentsController.cs @@ -93,7 +93,7 @@ namespace Squidex.Areas.Api.Controllers.Comments } /// - /// Updates the comment. + /// Update a comment. /// /// The name of the app. /// The id of the comments. @@ -118,7 +118,7 @@ namespace Squidex.Areas.Api.Controllers.Comments } /// - /// Deletes the comment. + /// Delete a comment. /// /// The name of the app. /// The id of the comments. diff --git a/backend/src/Squidex/Areas/Api/Controllers/Comments/Notifications/UserNotificationsController.cs b/backend/src/Squidex/Areas/Api/Controllers/Comments/Notifications/UserNotificationsController.cs index 6244c397b..d91202abb 100644 --- a/backend/src/Squidex/Areas/Api/Controllers/Comments/Notifications/UserNotificationsController.cs +++ b/backend/src/Squidex/Areas/Api/Controllers/Comments/Notifications/UserNotificationsController.cs @@ -67,7 +67,7 @@ namespace Squidex.Areas.Api.Controllers.Comments.Notifications } /// - /// Deletes the notification. + /// Delete a notification. /// /// The user id. /// The id of the comment. diff --git a/backend/src/Squidex/Areas/Api/Controllers/Schemas/SchemaFieldsController.cs b/backend/src/Squidex/Areas/Api/Controllers/Schemas/SchemaFieldsController.cs index 33cceda86..59e3c5e0e 100644 --- a/backend/src/Squidex/Areas/Api/Controllers/Schemas/SchemaFieldsController.cs +++ b/backend/src/Squidex/Areas/Api/Controllers/Schemas/SchemaFieldsController.cs @@ -107,7 +107,7 @@ namespace Squidex.Areas.Api.Controllers.Schemas } /// - /// Reorders the fields. + /// Reorder all fields. /// /// The name of the app. /// The name of the schema. @@ -132,7 +132,7 @@ namespace Squidex.Areas.Api.Controllers.Schemas } /// - /// Reorders the nested fields. + /// Reorder all nested fields. /// /// The name of the app. /// The name of the schema.