diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Member/Item/ItemMemberItemController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Member/Item/ItemMemberItemController.cs new file mode 100644 index 0000000000..620b549e5f --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/Controllers/Member/Item/ItemMemberItemController.cs @@ -0,0 +1,30 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Umbraco.Cms.Api.Management.ViewModels.Member.Item; +using Umbraco.Cms.Core.Mapping; +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Services; + +namespace Umbraco.Cms.Api.Management.Controllers.Member.Item; + +public class ItemMemberItemController : MemberItemControllerBase +{ + private readonly IMemberService _memberService; + private readonly IUmbracoMapper _mapper; + + public ItemMemberItemController(IMemberService memberService, IUmbracoMapper mapper) + { + _memberService = memberService; + _mapper = mapper; + } + + [HttpGet("item")] + [MapToApiVersion("1.0")] + [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] + public async Task Item([FromQuery(Name = "id")] SortedSet ids) + { + IEnumerable members = await _memberService.GetByKeysAsync(ids.ToArray()); + List responseModels = _mapper.MapEnumerable(members); + return Ok(responseModels); + } +} diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Member/Item/MemberItemControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Member/Item/MemberItemControllerBase.cs new file mode 100644 index 0000000000..5ebb4da2e1 --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/Controllers/Member/Item/MemberItemControllerBase.cs @@ -0,0 +1,13 @@ +using Microsoft.AspNetCore.Mvc; +using Umbraco.Cms.Api.Management.Routing; +using Umbraco.Cms.Core; + +namespace Umbraco.Cms.Api.Management.Controllers.Member.Item; + +[ApiVersion("1.0")] +[ApiController] +[VersionedApiBackOfficeRoute($"{Constants.UdiEntityType.Member}")] +[ApiExplorerSettings(GroupName = "Member")] +public class MemberItemControllerBase : ManagementApiControllerBase +{ +} diff --git a/src/Umbraco.Cms.Api.Management/Controllers/StaticFile/Item/ItemStaticFileItemController.cs b/src/Umbraco.Cms.Api.Management/Controllers/StaticFile/Item/ItemStaticFileItemController.cs index 196cb8c602..7f42022488 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/StaticFile/Item/ItemStaticFileItemController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/StaticFile/Item/ItemStaticFileItemController.cs @@ -6,7 +6,7 @@ using Umbraco.Cms.Core.IO; namespace Umbraco.Cms.Api.Management.Controllers.StaticFile.Item; -public class ItemStaticFileItemController : ManagementApiControllerBase +public class ItemStaticFileItemController : StaticFileItemControllerBase { private readonly IFileItemPresentationModelFactory _presentationModelFactory; private readonly IPhysicalFileSystem _physicalFileSystem; diff --git a/src/Umbraco.Cms.Api.Management/Controllers/StaticFile/Item/StaticFileItemControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/StaticFile/Item/StaticFileItemControllerBase.cs index 21c2c18795..3ee012c1a2 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/StaticFile/Item/StaticFileItemControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/StaticFile/Item/StaticFileItemControllerBase.cs @@ -1,5 +1,12 @@ -namespace Umbraco.Cms.Api.Management.Controllers.StaticFile.Item; +using Microsoft.AspNetCore.Mvc; +using Umbraco.Cms.Api.Management.Routing; +namespace Umbraco.Cms.Api.Management.Controllers.StaticFile.Item; + +[ApiVersion("1.0")] +[ApiController] +[VersionedApiBackOfficeRoute("static-file")] +[ApiExplorerSettings(GroupName = "Static File")] public class StaticFileItemControllerBase : ManagementApiControllerBase { } diff --git a/src/Umbraco.Cms.Api.Management/Controllers/UserGroups/Item/ItemUserGroupItemController.cs b/src/Umbraco.Cms.Api.Management/Controllers/UserGroups/Item/ItemUserGroupItemController.cs new file mode 100644 index 0000000000..ee60082755 --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/Controllers/UserGroups/Item/ItemUserGroupItemController.cs @@ -0,0 +1,30 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Umbraco.Cms.Api.Management.ViewModels.UserGroups.Item; +using Umbraco.Cms.Core.Mapping; +using Umbraco.Cms.Core.Models.Membership; +using Umbraco.Cms.Core.Services; + +namespace Umbraco.Cms.Api.Management.Controllers.UserGroups.Item; + +public class ItemUserGroupItemController : UserGroupItemControllerBase +{ + private readonly IUserGroupService _userGroupService; + private readonly IUmbracoMapper _mapper; + + public ItemUserGroupItemController(IUserGroupService userGroupService, IUmbracoMapper mapper) + { + _userGroupService = userGroupService; + _mapper = mapper; + } + + [HttpGet("item")] + [MapToApiVersion("1.0")] + [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] + public async Task Item([FromQuery(Name = "id")] SortedSet ids) + { + IEnumerable userGroups = await _userGroupService.GetAsync(ids); + List responseModels = _mapper.MapEnumerable(userGroups); + return Ok(responseModels); + } +} diff --git a/src/Umbraco.Cms.Api.Management/Controllers/UserGroups/Item/UserGroupItemControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/UserGroups/Item/UserGroupItemControllerBase.cs new file mode 100644 index 0000000000..d5623c655f --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/Controllers/UserGroups/Item/UserGroupItemControllerBase.cs @@ -0,0 +1,12 @@ +using Microsoft.AspNetCore.Mvc; +using Umbraco.Cms.Api.Management.Routing; + +namespace Umbraco.Cms.Api.Management.Controllers.UserGroups.Item; + +[ApiController] +[VersionedApiBackOfficeRoute("user-groups")] +[ApiExplorerSettings(GroupName = "User Groups")] +[ApiVersion("1.0")] +public class UserGroupItemControllerBase : ManagementApiControllerBase +{ +} diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Users/Item/ItemUserItemController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Users/Item/ItemUserItemController.cs new file mode 100644 index 0000000000..58b6a3368e --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/Controllers/Users/Item/ItemUserItemController.cs @@ -0,0 +1,30 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Umbraco.Cms.Api.Management.ViewModels.Users.Item; +using Umbraco.Cms.Core.Mapping; +using Umbraco.Cms.Core.Models.Membership; +using Umbraco.Cms.Core.Services; + +namespace Umbraco.Cms.Api.Management.Controllers.Users.Item; + +public class ItemUserItemController : UserItemControllerBase +{ + private readonly IUserService _userService; + private readonly IUmbracoMapper _mapper; + + public ItemUserItemController(IUserService userService, IUmbracoMapper mapper) + { + _userService = userService; + _mapper = mapper; + } + + [HttpGet("item")] + [MapToApiVersion("1.0")] + [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] + public async Task Item([FromQuery(Name = "id")] SortedSet ids) + { + IEnumerable users = await _userService.GetAsync(ids.ToArray()); + List responseModels = _mapper.MapEnumerable(users); + return Ok(responseModels); + } +} diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Users/Item/UserItemControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Users/Item/UserItemControllerBase.cs new file mode 100644 index 0000000000..02f8df9c57 --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/Controllers/Users/Item/UserItemControllerBase.cs @@ -0,0 +1,12 @@ +using Microsoft.AspNetCore.Mvc; +using Umbraco.Cms.Api.Management.Routing; + +namespace Umbraco.Cms.Api.Management.Controllers.Users.Item; + +[ApiController] +[VersionedApiBackOfficeRoute("users")] +[ApiExplorerSettings(GroupName = "Users")] +[ApiVersion("1.0")] +public class UserItemControllerBase : ManagementApiControllerBase +{ +} diff --git a/src/Umbraco.Cms.Api.Management/Mapping/Items/ItemTypeMapDefinition.cs b/src/Umbraco.Cms.Api.Management/Mapping/Items/ItemTypeMapDefinition.cs index 0a4b97dad8..6530403cda 100644 --- a/src/Umbraco.Cms.Api.Management/Mapping/Items/ItemTypeMapDefinition.cs +++ b/src/Umbraco.Cms.Api.Management/Mapping/Items/ItemTypeMapDefinition.cs @@ -1,19 +1,20 @@ -using NPoco.FluentMappings; -using Umbraco.Cms.Api.Management.ViewModels.DataType.Item; +using Umbraco.Cms.Api.Management.ViewModels.DataType.Item; using Umbraco.Cms.Api.Management.ViewModels.Dictionary.Item; -using Umbraco.Cms.Api.Management.ViewModels.DocumentBlueprint.Item; using Umbraco.Cms.Api.Management.ViewModels.DocumentType.Item; using Umbraco.Cms.Api.Management.ViewModels.Language.Item; using Umbraco.Cms.Api.Management.ViewModels.Media.Item; using Umbraco.Cms.Api.Management.ViewModels.MediaType.Item; +using Umbraco.Cms.Api.Management.ViewModels.Member.Item; using Umbraco.Cms.Api.Management.ViewModels.MemberGroup.Item; using Umbraco.Cms.Api.Management.ViewModels.MemberType.Items; using Umbraco.Cms.Api.Management.ViewModels.RelationType.Item; using Umbraco.Cms.Api.Management.ViewModels.Template.Item; -using Umbraco.Cms.Core; +using Umbraco.Cms.Api.Management.ViewModels.UserGroups.Item; +using Umbraco.Cms.Api.Management.ViewModels.Users.Item; using Umbraco.Cms.Core.Mapping; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Models.Entities; +using Umbraco.Cms.Core.Models.Membership; namespace Umbraco.Cms.Api.Management.Mapping.Items; @@ -31,6 +32,9 @@ public class ItemTypeMapDefinition : IMapDefinition mapper.Define((_, _) => new MemberTypeItemResponseModel(), Map); mapper.Define((_, _) => new RelationTypeItemResponseModel(), Map); mapper.Define((_, _) => new MediaItemResponseModel(), Map); + mapper.Define((_, _) => new MemberItemResponseModel(), Map); + mapper.Define((_, _) => new UserItemResponseModel(), Map); + mapper.Define((_, _) => new UserGroupItemResponseModel(), Map); } // Umbraco.Code.MapAll @@ -108,4 +112,27 @@ public class ItemTypeMapDefinition : IMapDefinition target.Id = source.Key; target.Name = source.Name ?? string.Empty; } + + // Umbraco.Code.MapAll + private static void Map(IMember source, MemberItemResponseModel target, MapperContext context) + { + target.Icon = source.ContentType.Icon; + target.Id = source.Key; + target.Name = source.Name ?? source.Username; + } + + // Umbraco.Code.MapAll + private static void Map(IUser source, UserItemResponseModel target, MapperContext context) + { + target.Id = source.Key; + target.Name = source.Name ?? source.Username; + } + + // Umbraco.Code.MapAll + private static void Map(IUserGroup source, UserGroupItemResponseModel target, MapperContext context) + { + target.Id = source.Key; + target.Name = source.Name ?? source.Alias; + target.Icon = source.Icon; + } } diff --git a/src/Umbraco.Cms.Api.Management/OpenApi.json b/src/Umbraco.Cms.Api.Management/OpenApi.json index 5d8c88d182..483c09a53f 100644 --- a/src/Umbraco.Cms.Api.Management/OpenApi.json +++ b/src/Umbraco.Cms.Api.Management/OpenApi.json @@ -909,9 +909,6 @@ } } }, - "404": { - "description": "Not Found" - }, "400": { "description": "Bad Request", "content": { @@ -922,6 +919,9 @@ } } }, + "404": { + "description": "Not Found" + }, "409": { "description": "Conflict", "content": { @@ -2065,9 +2065,6 @@ } ], "responses": { - "401": { - "description": "Unauthorized" - }, "200": { "description": "Success", "content": { @@ -2077,6 +2074,9 @@ } } } + }, + "401": { + "description": "Unauthorized" } } } @@ -2108,9 +2108,6 @@ } ], "responses": { - "401": { - "description": "Unauthorized" - }, "200": { "description": "Success", "content": { @@ -2120,6 +2117,9 @@ } } } + }, + "401": { + "description": "Unauthorized" } } } @@ -2299,9 +2299,6 @@ } ], "responses": { - "404": { - "description": "Not Found" - }, "200": { "description": "Success", "content": { @@ -2315,6 +2312,9 @@ } } } + }, + "404": { + "description": "Not Found" } } } @@ -2336,9 +2336,6 @@ } ], "responses": { - "404": { - "description": "Not Found" - }, "200": { "description": "Success", "content": { @@ -2352,6 +2349,9 @@ } } } + }, + "404": { + "description": "Not Found" } } } @@ -2376,16 +2376,6 @@ } }, "responses": { - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetailsModel" - } - } - } - }, "200": { "description": "Success", "content": { @@ -2399,6 +2389,16 @@ } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetailsModel" + } + } + } } } } @@ -2450,16 +2450,6 @@ } ], "responses": { - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetailsModel" - } - } - } - }, "200": { "description": "Success", "content": { @@ -2469,6 +2459,16 @@ } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetailsModel" + } + } + } } } } @@ -2528,16 +2528,6 @@ } ], "responses": { - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetailsModel" - } - } - } - }, "200": { "description": "Success", "content": { @@ -2551,6 +2541,16 @@ } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetailsModel" + } + } + } } } } @@ -2572,16 +2572,6 @@ } ], "responses": { - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetailsModel" - } - } - } - }, "200": { "description": "Success", "content": { @@ -2591,6 +2581,16 @@ } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetailsModel" + } + } + } } } } @@ -2602,6 +2602,20 @@ ], "operationId": "GetInstallSettings", "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/InstallSettingsResponseModel" + } + ] + } + } + } + }, "400": { "description": "Bad Request", "content": { @@ -2621,20 +2635,6 @@ } } } - }, - "200": { - "description": "Success", - "content": { - "application/json": { - "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/InstallSettingsResponseModel" - } - ] - } - } - } } } } @@ -2659,6 +2659,9 @@ } }, "responses": { + "200": { + "description": "Success" + }, "400": { "description": "Bad Request", "content": { @@ -2678,9 +2681,6 @@ } } } - }, - "200": { - "description": "Success" } } } @@ -2705,6 +2705,9 @@ } }, "responses": { + "200": { + "description": "Success" + }, "400": { "description": "Bad Request", "content": { @@ -2714,9 +2717,6 @@ } } } - }, - "200": { - "description": "Success" } } } @@ -2779,19 +2779,6 @@ } }, "responses": { - "404": { - "description": "Not Found" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetailsModel" - } - } - } - }, "201": { "description": "Created", "headers": { @@ -2804,6 +2791,19 @@ } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetailsModel" + } + } + } + }, + "404": { + "description": "Not Found" } } } @@ -2825,9 +2825,6 @@ } ], "responses": { - "404": { - "description": "Not Found" - }, "200": { "description": "Success", "content": { @@ -2841,6 +2838,9 @@ } } } + }, + "404": { + "description": "Not Found" } } }, @@ -2860,6 +2860,9 @@ } ], "responses": { + "200": { + "description": "Success" + }, "400": { "description": "Bad Request", "content": { @@ -2879,9 +2882,6 @@ } } } - }, - "200": { - "description": "Success" } } }, @@ -2914,8 +2914,8 @@ } }, "responses": { - "404": { - "description": "Not Found" + "200": { + "description": "Success" }, "400": { "description": "Bad Request", @@ -2927,8 +2927,8 @@ } } }, - "200": { - "description": "Success" + "404": { + "description": "Not Found" } } } @@ -3038,16 +3038,6 @@ } ], "responses": { - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetailsModel" - } - } - } - }, "200": { "description": "Success", "content": { @@ -3061,6 +3051,16 @@ } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetailsModel" + } + } + } } } } @@ -3188,16 +3188,6 @@ } ], "responses": { - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetailsModel" - } - } - } - }, "200": { "description": "Success", "content": { @@ -3207,6 +3197,16 @@ } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetailsModel" + } + } + } } } } @@ -3269,16 +3269,6 @@ } }, "responses": { - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetailsModel" - } - } - } - }, "201": { "description": "Created", "headers": { @@ -3291,6 +3281,16 @@ } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetailsModel" + } + } + } } } } @@ -3312,9 +3312,6 @@ } ], "responses": { - "404": { - "description": "Not Found" - }, "200": { "description": "Success", "content": { @@ -3328,6 +3325,9 @@ } } } + }, + "404": { + "description": "Not Found" } } }, @@ -3347,11 +3347,11 @@ } ], "responses": { - "404": { - "description": "Not Found" - }, "200": { "description": "Success" + }, + "404": { + "description": "Not Found" } } } @@ -3381,6 +3381,9 @@ } ], "responses": { + "200": { + "description": "Success" + }, "400": { "description": "Bad Request", "content": { @@ -3390,9 +3393,6 @@ } } } - }, - "200": { - "description": "Success" } } } @@ -3856,9 +3856,6 @@ } ], "responses": { - "401": { - "description": "Unauthorized" - }, "200": { "description": "Success", "content": { @@ -3868,6 +3865,9 @@ } } } + }, + "401": { + "description": "Unauthorized" } } } @@ -3899,9 +3899,6 @@ } ], "responses": { - "401": { - "description": "Unauthorized" - }, "200": { "description": "Success", "content": { @@ -3911,6 +3908,9 @@ } } } + }, + "401": { + "description": "Unauthorized" } } } @@ -4232,6 +4232,47 @@ } } }, + "/umbraco/management/api/v1/member/item": { + "get": { + "tags": [ + "Member" + ], + "operationId": "GetMemberItem", + "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/MemberItemResponseModel" + } + ] + } + } + } + } + } + } + } + }, "/umbraco/management/api/v1/models-builder/build": { "post": { "tags": [ @@ -4360,6 +4401,9 @@ } ], "responses": { + "200": { + "description": "Success" + }, "404": { "description": "Not Found" }, @@ -4372,9 +4416,6 @@ } } } - }, - "200": { - "description": "Success" } } } @@ -4437,19 +4478,6 @@ } }, "responses": { - "404": { - "description": "Not Found" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetailsModel" - } - } - } - }, "201": { "description": "Created", "headers": { @@ -4462,6 +4490,19 @@ } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetailsModel" + } + } + } + }, + "404": { + "description": "Not Found" } } } @@ -4484,9 +4525,6 @@ } ], "responses": { - "404": { - "description": "Not Found" - }, "200": { "description": "Success", "content": { @@ -4500,6 +4538,9 @@ } } } + }, + "404": { + "description": "Not Found" } } }, @@ -4520,11 +4561,11 @@ } ], "responses": { - "404": { - "description": "Not Found" - }, "200": { "description": "Success" + }, + "404": { + "description": "Not Found" } } }, @@ -4558,11 +4599,11 @@ } }, "responses": { - "404": { - "description": "Not Found" - }, "200": { "description": "Success" + }, + "404": { + "description": "Not Found" } } } @@ -4585,9 +4626,6 @@ } ], "responses": { - "404": { - "description": "Not Found" - }, "200": { "description": "Success", "content": { @@ -4598,6 +4636,9 @@ } } } + }, + "404": { + "description": "Not Found" } } } @@ -4868,16 +4909,6 @@ } ], "responses": { - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetailsModel" - } - } - } - }, "200": { "description": "Success", "content": { @@ -4887,6 +4918,16 @@ } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetailsModel" + } + } + } } } } @@ -4982,16 +5023,6 @@ } ], "responses": { - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetailsModel" - } - } - } - }, "200": { "description": "Success", "content": { @@ -5001,6 +5032,16 @@ } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetailsModel" + } + } + } } } } @@ -5782,16 +5823,6 @@ ], "operationId": "GetServerStatus", "responses": { - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetailsModel" - } - } - } - }, "200": { "description": "Success", "content": { @@ -5805,6 +5836,16 @@ } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetailsModel" + } + } + } } } } @@ -5816,16 +5857,6 @@ ], "operationId": "GetServerVersion", "responses": { - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetailsModel" - } - } - } - }, "200": { "description": "Success", "content": { @@ -5839,6 +5870,56 @@ } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetailsModel" + } + } + } + } + } + } + }, + "/umbraco/management/api/v1/static-file/item": { + "get": { + "tags": [ + "Static File" + ], + "operationId": "GetStaticFileItem", + "parameters": [ + { + "name": "path", + "in": "query", + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/StaticFileItemResponseModel" + } + ] + } + } + } + } } } } @@ -6198,6 +6279,9 @@ } }, "responses": { + "200": { + "description": "Success" + }, "400": { "description": "Bad Request", "content": { @@ -6207,9 +6291,6 @@ } } } - }, - "200": { - "description": "Success" } } } @@ -6679,6 +6760,20 @@ } ], "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/TemporaryFileResponseModel" + } + ] + } + } + } + }, "400": { "description": "Bad Request", "content": { @@ -6698,20 +6793,6 @@ } } } - }, - "200": { - "description": "Success", - "content": { - "application/json": { - "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/TemporaryFileResponseModel" - } - ] - } - } - } } } }, @@ -6732,6 +6813,9 @@ } ], "responses": { + "200": { + "description": "Success" + }, "400": { "description": "Bad Request", "content": { @@ -6751,9 +6835,6 @@ } } } - }, - "200": { - "description": "Success" } } } @@ -7017,16 +7098,6 @@ } }, "responses": { - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetailsModel" - } - } - } - }, "201": { "description": "Created", "headers": { @@ -7039,6 +7110,16 @@ } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetailsModel" + } + } + } } } }, @@ -7182,6 +7263,47 @@ } } }, + "/umbraco/management/api/v1/user-groups/item": { + "get": { + "tags": [ + "User Groups" + ], + "operationId": "GetUserGroupsItem", + "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/UserGroupItemResponseModel" + } + ] + } + } + } + } + } + } + } + }, "/umbraco/management/api/v1/users": { "post": { "tags": [ @@ -7647,6 +7769,47 @@ } } }, + "/umbraco/management/api/v1/users/item": { + "get": { + "tags": [ + "Users" + ], + "operationId": "GetUsersItem", + "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/UserItemResponseModel" + } + ] + } + } + } + } + } + } + } + }, "/umbraco/management/api/v1/users/set-user-groups": { "post": { "tags": [ @@ -7708,46 +7871,6 @@ } } } - }, - "/item": { - "get": { - "tags": [ - "v1" - ], - "operationId": "GetItem", - "parameters": [ - { - "name": "path", - "in": "query", - "schema": { - "uniqueItems": true, - "type": "array", - "items": { - "type": "string" - } - } - } - ], - "responses": { - "200": { - "description": "Success", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/StaticFileItemResponseModel" - } - ] - } - } - } - } - } - } - } } }, "components": { @@ -9499,7 +9622,7 @@ }, "providerProperties": { "type": "object", - "additionalProperties": { }, + "additionalProperties": {}, "nullable": true } }, @@ -9875,6 +9998,21 @@ ], "additionalProperties": false }, + "MemberItemResponseModel": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/ItemResponseModelBaseModel" + } + ], + "properties": { + "icon": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, "MemberTypeItemResponseModel": { "type": "object", "allOf": [ @@ -10060,7 +10198,7 @@ }, "extensions": { "type": "array", - "items": { } + "items": {} } }, "additionalProperties": false @@ -11000,7 +11138,7 @@ "nullable": true } }, - "additionalProperties": { } + "additionalProperties": {} }, "ProfilingStatusRequestModel": { "type": "object", @@ -12136,6 +12274,21 @@ }, "additionalProperties": false }, + "UserGroupItemResponseModel": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/ItemResponseModelBaseModel" + } + ], + "properties": { + "icon": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, "UserGroupPresentationModel": { "required": [ "$type" @@ -12192,6 +12345,15 @@ }, "additionalProperties": false }, + "UserItemResponseModel": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/ItemResponseModelBaseModel" + } + ], + "additionalProperties": false + }, "UserOrderModel": { "enum": [ "UserName", @@ -12471,7 +12633,7 @@ "authorizationCode": { "authorizationUrl": "/umbraco/management/api/v1.0/security/back-office/authorize", "tokenUrl": "/umbraco/management/api/v1.0/security/back-office/token", - "scopes": { } + "scopes": {} } } } @@ -12479,7 +12641,7 @@ }, "security": [ { - "OAuth": [ ] + "OAuth": [] } ] } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Member/Item/MemberItemResponseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Member/Item/MemberItemResponseModel.cs new file mode 100644 index 0000000000..24e7b55166 --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Member/Item/MemberItemResponseModel.cs @@ -0,0 +1,8 @@ +using Umbraco.Cms.Api.Management.ViewModels.Item; + +namespace Umbraco.Cms.Api.Management.ViewModels.Member.Item; + +public class MemberItemResponseModel : ItemResponseModelBase +{ + public string? Icon { get; set; } +} diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/UserGroups/Item/UserGroupItemResponseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/UserGroups/Item/UserGroupItemResponseModel.cs new file mode 100644 index 0000000000..b24338c257 --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/ViewModels/UserGroups/Item/UserGroupItemResponseModel.cs @@ -0,0 +1,8 @@ +using Umbraco.Cms.Api.Management.ViewModels.Item; + +namespace Umbraco.Cms.Api.Management.ViewModels.UserGroups.Item; + +public class UserGroupItemResponseModel : ItemResponseModelBase +{ + public string? Icon { get; set; } +} diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Users/Item/UserItemResponseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Users/Item/UserItemResponseModel.cs new file mode 100644 index 0000000000..cc4a78fe50 --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Users/Item/UserItemResponseModel.cs @@ -0,0 +1,7 @@ +using Umbraco.Cms.Api.Management.ViewModels.Item; + +namespace Umbraco.Cms.Api.Management.ViewModels.Users.Item; + +public class UserItemResponseModel : ItemResponseModelBase +{ +} diff --git a/src/Umbraco.Core/CompatibilitySuppressions.xml b/src/Umbraco.Core/CompatibilitySuppressions.xml index a554c1d785..4e56b4adac 100644 --- a/src/Umbraco.Core/CompatibilitySuppressions.xml +++ b/src/Umbraco.Core/CompatibilitySuppressions.xml @@ -1128,6 +1128,13 @@ lib/net7.0/Umbraco.Core.dll true + + CP0006 + M:Umbraco.Cms.Core.Services.IMemberService.GetByKeysAsync(System.Guid[]) + lib/net7.0/Umbraco.Core.dll + lib/net7.0/Umbraco.Core.dll + true + CP0006 M:Umbraco.Cms.Core.Services.IPackagingService.CreateCreatedPackageAsync(Umbraco.Cms.Core.Packaging.PackageDefinition,System.Guid) diff --git a/src/Umbraco.Core/Services/IMemberService.cs b/src/Umbraco.Core/Services/IMemberService.cs index b2b2b5d8d5..e9200c213b 100644 --- a/src/Umbraco.Core/Services/IMemberService.cs +++ b/src/Umbraco.Core/Services/IMemberService.cs @@ -247,6 +247,15 @@ public interface IMemberService : IMembershipMemberService /// IEnumerable GetAllMembers(params int[] ids); + /// + /// Gets objects by Ids + /// + /// Ids of the Member to retrieve + /// + /// + /// + Task> GetByKeysAsync(params Guid[] ids); + /// /// Delete Members of the specified MemberType id /// diff --git a/src/Umbraco.Core/Services/MemberService.cs b/src/Umbraco.Core/Services/MemberService.cs index 3e5464edd9..2f70ae51aa 100644 --- a/src/Umbraco.Core/Services/MemberService.cs +++ b/src/Umbraco.Core/Services/MemberService.cs @@ -459,6 +459,15 @@ namespace Umbraco.Cms.Core.Services return _memberRepository.GetMany(ids); } + /// + public Task> GetByKeysAsync(params Guid[] ids) + { + using ICoreScope scope = ScopeProvider.CreateCoreScope(autoComplete: true); + scope.ReadLock(Constants.Locks.MemberTree); + IQuery query = Query().Where(x => ids.Contains(x.Key)); + return Task.FromResult(_memberRepository.Get(query)); + } + /// /// Finds Members based on their display name ///