diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Language/Item/ItemsLanguageEntityController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Language/Item/ItemLanguageItemController.cs similarity index 84% rename from src/Umbraco.Cms.Api.Management/Controllers/Language/Item/ItemsLanguageEntityController.cs rename to src/Umbraco.Cms.Api.Management/Controllers/Language/Item/ItemLanguageItemController.cs index 53ca45c2c6..aa7e412251 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Language/Item/ItemsLanguageEntityController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Language/Item/ItemLanguageItemController.cs @@ -9,12 +9,12 @@ using Umbraco.Cms.Core.Services; namespace Umbraco.Cms.Api.Management.Controllers.Language.Item; [ApiVersion("1.0")] -public class ItemsLanguageEntityController : LanguageEntityControllerBase +public class ItemLanguageItemController : LanguageItemControllerBase { private readonly ILanguageService _languageService; private readonly IUmbracoMapper _mapper; - public ItemsLanguageEntityController(ILanguageService languageService, IUmbracoMapper mapper) + public ItemLanguageItemController(ILanguageService languageService, IUmbracoMapper mapper) { _languageService = languageService; _mapper = mapper; @@ -23,7 +23,7 @@ public class ItemsLanguageEntityController : LanguageEntityControllerBase [HttpGet] [MapToApiVersion("1.0")] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] - public async Task Items( + public async Task Item( CancellationToken cancellationToken, [FromQuery(Name = "isoCode")] HashSet isoCodes) { diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Language/Item/LanguageEntityControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Language/Item/LanguageItemControllerBase.cs similarity index 87% rename from src/Umbraco.Cms.Api.Management/Controllers/Language/Item/LanguageEntityControllerBase.cs rename to src/Umbraco.Cms.Api.Management/Controllers/Language/Item/LanguageItemControllerBase.cs index 0a06573b62..1e416bdee6 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Language/Item/LanguageEntityControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Language/Item/LanguageItemControllerBase.cs @@ -9,6 +9,6 @@ namespace Umbraco.Cms.Api.Management.Controllers.Language.Item; [VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Item}/{Constants.UdiEntityType.Language}")] [ApiExplorerSettings(GroupName = nameof(Constants.UdiEntityType.Language))] [Authorize(Policy = AuthorizationPolicies.TreeAccessLanguages)] -public class LanguageEntityControllerBase : ManagementApiControllerBase +public class LanguageItemControllerBase : ManagementApiControllerBase { } diff --git a/src/Umbraco.Cms.Api.Management/Controllers/MemberGroup/CreateMemberGroupController.cs b/src/Umbraco.Cms.Api.Management/Controllers/MemberGroup/CreateMemberGroupController.cs index a2c1b92360..d6780149db 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/MemberGroup/CreateMemberGroupController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/MemberGroup/CreateMemberGroupController.cs @@ -24,14 +24,14 @@ public class CreateMemberGroupController : MemberGroupControllerBase [HttpPost] [MapToApiVersion("1.0")] - [ProducesResponseType(typeof(MemberGroupResponseModel), StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status201Created)] [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)] public async Task Create(CancellationToken cancellationToken, CreateMemberGroupRequestModel model) { IMemberGroup? memberGroup = _mapper.Map(model); Attempt result = await _memberGroupService.CreateAsync(memberGroup!); return result.Success - ? Ok(_mapper.Map(result.Result)) + ? CreatedAtId(controller => nameof(controller.ByKey), result.Result!.Key) : MemberGroupOperationStatusResult(result.Status); } } diff --git a/src/Umbraco.Cms.Api.Management/Controllers/MemberGroup/UpdateMemberGroupController.cs b/src/Umbraco.Cms.Api.Management/Controllers/MemberGroup/UpdateMemberGroupController.cs index 3ced2c23a1..b8fb0a4bb8 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/MemberGroup/UpdateMemberGroupController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/MemberGroup/UpdateMemberGroupController.cs @@ -24,7 +24,7 @@ public class UpdateMemberGroupController : MemberGroupControllerBase [HttpPut($"{{{nameof(id)}:guid}}")] [MapToApiVersion("1.0")] - [ProducesResponseType(typeof(MemberGroupResponseModel), StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)] [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status404NotFound)] public async Task Update( @@ -42,7 +42,7 @@ public class UpdateMemberGroupController : MemberGroupControllerBase Attempt result = await _memberGroupService.UpdateAsync(updated); return result.Success - ? Ok(_mapper.Map(result.Result)) + ? Ok() : MemberGroupOperationStatusResult(result.Status); } } diff --git a/src/Umbraco.Cms.Api.Management/Controllers/UserData/UpdateUserDataController.cs b/src/Umbraco.Cms.Api.Management/Controllers/UserData/UpdateUserDataController.cs index 2969ecdf48..b345701416 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/UserData/UpdateUserDataController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/UserData/UpdateUserDataController.cs @@ -33,7 +33,7 @@ public class UpdateUserDataController : UserDataControllerBase [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(typeof(UserDataOperationStatus), StatusCodes.Status400BadRequest)] [ProducesResponseType(typeof(UserDataOperationStatus), StatusCodes.Status404NotFound)] - public async Task Create(CancellationToken cancellationToken, UpdateUserDataRequestModel model) + public async Task Update(CancellationToken cancellationToken, UpdateUserDataRequestModel model) { Guid currentUserKey = CurrentUserKey(_backOfficeSecurityAccessor); @@ -43,7 +43,7 @@ public class UpdateUserDataController : UserDataControllerBase Attempt attempt = await _userDataService.UpdateAsync(userData); return attempt.Success - ? Ok(attempt.Result) + ? Ok() : UserDataOperationStatusResult(attempt.Status); } } diff --git a/src/Umbraco.Cms.Api.Management/Controllers/UserGroup/UserGroupsControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/UserGroup/UserGroupControllerBase.cs similarity index 100% rename from src/Umbraco.Cms.Api.Management/Controllers/UserGroup/UserGroupsControllerBase.cs rename to src/Umbraco.Cms.Api.Management/Controllers/UserGroup/UserGroupControllerBase.cs diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Webhook/Item/ItemsWebhookEntityController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Webhook/Item/ItemWebhookItemController.cs similarity index 79% rename from src/Umbraco.Cms.Api.Management/Controllers/Webhook/Item/ItemsWebhookEntityController.cs rename to src/Umbraco.Cms.Api.Management/Controllers/Webhook/Item/ItemWebhookItemController.cs index b4c84efad6..196a18f178 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Webhook/Item/ItemsWebhookEntityController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Webhook/Item/ItemWebhookItemController.cs @@ -9,23 +9,23 @@ using Umbraco.Cms.Core.Services; namespace Umbraco.Cms.Api.Management.Controllers.Webhook.Item; [ApiVersion("1.0")] -public class ItemsWebhookEntityController : WebhookEntityControllerBase +public class ItemWebhookItemController : WebhookItemControllerBase { private readonly IWebhookService _webhookService; private readonly IUmbracoMapper _mapper; - public ItemsWebhookEntityController(IWebhookService webhookService, IUmbracoMapper mapper) + public ItemWebhookItemController(IWebhookService webhookService, IUmbracoMapper mapper) { _webhookService = webhookService; _mapper = mapper; } - [HttpGet("item")] + [HttpGet] [MapToApiVersion("1.0")] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] - public async Task Items( + public async Task Item( CancellationToken cancellationToken, - [FromQuery(Name = "ids")] HashSet ids) + [FromQuery(Name = "id")] HashSet ids) { if (ids.Count is 0) { diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Webhook/Item/WebhookEntityControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Webhook/Item/WebhookItemControllerBase.cs similarity index 68% rename from src/Umbraco.Cms.Api.Management/Controllers/Webhook/Item/WebhookEntityControllerBase.cs rename to src/Umbraco.Cms.Api.Management/Controllers/Webhook/Item/WebhookItemControllerBase.cs index b28cb6c062..30b8ef5ac7 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Webhook/Item/WebhookEntityControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Webhook/Item/WebhookItemControllerBase.cs @@ -6,9 +6,9 @@ using Umbraco.Cms.Web.Common.Authorization; namespace Umbraco.Cms.Api.Management.Controllers.Webhook.Item; -[VersionedApiBackOfficeRoute($"{Constants.UdiEntityType.Webhook}")] +[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Item}/{Constants.UdiEntityType.Webhook}")] [ApiExplorerSettings(GroupName = "Webhook")] [Authorize(Policy = AuthorizationPolicies.TreeAccessWebhooks)] -public class WebhookEntityControllerBase : ManagementApiControllerBase +public class WebhookItemControllerBase : ManagementApiControllerBase { } diff --git a/src/Umbraco.Cms.Api.Management/OpenApi.json b/src/Umbraco.Cms.Api.Management/OpenApi.json index c16cf7240c..ea506a31c0 100644 --- a/src/Umbraco.Cms.Api.Management/OpenApi.json +++ b/src/Umbraco.Cms.Api.Management/OpenApi.json @@ -16922,9 +16922,24 @@ } }, "responses": { - "200": { - "description": "Success", + "201": { + "description": "Created", "headers": { + "Umb-Generated-Resource": { + "description": "Identifier of the newly created resource", + "schema": { + "type": "string", + "description": "Identifier of the newly created resource" + } + }, + "Location": { + "description": "Location of the newly created resource", + "schema": { + "type": "string", + "description": "Location of the newly created resource", + "format": "uri" + } + }, "Umb-Notifications": { "description": "The list of notifications produced during the request.", "schema": { @@ -16935,17 +16950,6 @@ "nullable": true } } - }, - "content": { - "application/json": { - "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/MemberGroupResponseModel" - } - ] - } - } } }, "400": { @@ -17218,17 +17222,6 @@ "nullable": true } } - }, - "content": { - "application/json": { - "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/MemberGroupResponseModel" - } - ] - } - } } }, "400": { @@ -27246,6 +27239,76 @@ } ] }, + "get": { + "tags": [ + "User Data" + ], + "operationId": "GetUserData", + "parameters": [ + { + "name": "groups", + "in": "query", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "identifiers", + "in": "query", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "skip", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + }, + { + "name": "take", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "default": 100 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/PagedUserDataResponseModel" + } + ] + } + } + } + }, + "401": { + "description": "The resource is protected and requires an authentication token" + } + }, + "security": [ + { + "Backoffice User": [ ] + } + ] + }, "put": { "tags": [ "User Data" @@ -27351,76 +27414,6 @@ "Backoffice User": [ ] } ] - }, - "get": { - "tags": [ - "User Data" - ], - "operationId": "GetUserData", - "parameters": [ - { - "name": "groups", - "in": "query", - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - { - "name": "identifiers", - "in": "query", - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - { - "name": "skip", - "in": "query", - "schema": { - "type": "integer", - "format": "int32", - "default": 0 - } - }, - { - "name": "take", - "in": "query", - "schema": { - "type": "integer", - "format": "int32", - "default": 100 - } - } - ], - "responses": { - "200": { - "description": "Success", - "content": { - "application/json": { - "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/PagedUserDataResponseModel" - } - ] - } - } - } - }, - "401": { - "description": "The resource is protected and requires an authentication token" - } - }, - "security": [ - { - "Backoffice User": [ ] - } - ] } }, "/umbraco/management/api/v1/user-data/{id}": { @@ -31603,6 +31596,58 @@ ] } }, + "/umbraco/management/api/v1/item/webhook": { + "get": { + "tags": [ + "Webhook" + ], + "operationId": "GetItemWebhook", + "parameters": [ + { + "name": "id", + "in": "query", + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/WebhookItemResponseModel" + } + ] + } + } + } + } + }, + "401": { + "description": "The resource is protected and requires an authentication token" + }, + "403": { + "description": "The authenticated user do not have access to this resource" + } + }, + "security": [ + { + "Backoffice User": [ ] + } + ] + } + }, "/umbraco/management/api/v1/webhook": { "get": { "tags": [ @@ -32104,58 +32149,6 @@ } ] } - }, - "/umbraco/management/api/v1/webhook/item": { - "get": { - "tags": [ - "Webhook" - ], - "operationId": "GetWebhookItem", - "parameters": [ - { - "name": "ids", - "in": "query", - "schema": { - "uniqueItems": true, - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - } - } - ], - "responses": { - "200": { - "description": "Success", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/WebhookItemResponseModel" - } - ] - } - } - } - } - }, - "401": { - "description": "The resource is protected and requires an authentication token" - }, - "403": { - "description": "The authenticated user do not have access to this resource" - } - }, - "security": [ - { - "Backoffice User": [ ] - } - ] - } } }, "components": { @@ -33449,7 +33442,8 @@ "groups": { "type": "array", "items": { - "type": "string" + "type": "string", + "format": "uuid" }, "nullable": true }, @@ -37901,7 +37895,8 @@ "groups": { "type": "array", "items": { - "type": "string" + "type": "string", + "format": "uuid" } } }, @@ -40937,11 +40932,9 @@ "type": "object", "properties": { "name": { - "minLength": 1, "type": "string" }, "alias": { - "minLength": 1, "type": "string" } }, @@ -42404,7 +42397,8 @@ "groups": { "type": "array", "items": { - "type": "string" + "type": "string", + "format": "uuid" }, "nullable": true }, @@ -43679,4 +43673,4 @@ } } } -} \ No newline at end of file +}