diff --git a/src/Umbraco.Cms.Api.Management/Controllers/DataType/CopyDataTypeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/DataType/CopyDataTypeController.cs index ed6c22aa07..8d59bb3a1f 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/DataType/CopyDataTypeController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/DataType/CopyDataTypeController.cs @@ -34,7 +34,7 @@ public class CopyDataTypeController : DataTypeControllerBase return DataTypeNotFound(); } - Attempt result = await _dataTypeService.CopyAsync(source, copyDataTypeRequestModel.TargetId, CurrentUserKey(_backOfficeSecurityAccessor)); + Attempt result = await _dataTypeService.CopyAsync(source, copyDataTypeRequestModel.Target?.Id, CurrentUserKey(_backOfficeSecurityAccessor)); return result.Success ? CreatedAtId(controller => nameof(controller.ByKey), result.Result.Key) diff --git a/src/Umbraco.Cms.Api.Management/Controllers/DataType/Item/ByEditorUiAliasController.cs b/src/Umbraco.Cms.Api.Management/Controllers/DataType/Item/ByEditorUiAliasController.cs index f48b439ef6..7394580cdb 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/DataType/Item/ByEditorUiAliasController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/DataType/Item/ByEditorUiAliasController.cs @@ -22,7 +22,7 @@ public class ByEditorUiAliasController : DatatypeItemControllerBase _mapper = mapper; } - [HttpGet("item/{*alias}")] + [HttpGet("{*alias}")] [MapToApiVersion("1.0")] [ProducesResponseType(typeof(DataTypeItemResponseModel), StatusCodes.Status200OK)] public async Task ByEditorUiAlias(string alias) diff --git a/src/Umbraco.Cms.Api.Management/Controllers/DataType/Item/DatatypeItemControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/DataType/Item/DatatypeItemControllerBase.cs index 37631c7931..5d1496cf0c 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/DataType/Item/DatatypeItemControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/DataType/Item/DatatypeItemControllerBase.cs @@ -7,7 +7,7 @@ using Umbraco.Cms.Web.Common.Authorization; namespace Umbraco.Cms.Api.Management.Controllers.DataType.Item; [ApiController] -[VersionedApiBackOfficeRoute($"{Constants.UdiEntityType.DataType}")] +[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Item}/{Constants.UdiEntityType.DataType}")] [ApiExplorerSettings(GroupName = "Data Type")] [Authorize(Policy = "New" + AuthorizationPolicies.TreeAccessDocumentsOrDocumentTypes)] public class DatatypeItemControllerBase : ManagementApiControllerBase diff --git a/src/Umbraco.Cms.Api.Management/Controllers/DataType/Item/ItemDatatypeItemController.cs b/src/Umbraco.Cms.Api.Management/Controllers/DataType/Item/ItemDatatypeItemController.cs index 99b0e1acc7..ac0b5a330a 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/DataType/Item/ItemDatatypeItemController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/DataType/Item/ItemDatatypeItemController.cs @@ -20,7 +20,7 @@ public class ItemDatatypeItemController : DatatypeItemControllerBase _mapper = mapper; } - [HttpGet("item")] + [HttpGet] [MapToApiVersion("1.0")] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] public async Task Item([FromQuery(Name = "id")] HashSet ids) diff --git a/src/Umbraco.Cms.Api.Management/Controllers/DataType/MoveDataTypeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/DataType/MoveDataTypeController.cs index abf79fd60a..8d4e4606d7 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/DataType/MoveDataTypeController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/DataType/MoveDataTypeController.cs @@ -34,7 +34,7 @@ public class MoveDataTypeController : DataTypeControllerBase return DataTypeNotFound(); } - Attempt result = await _dataTypeService.MoveAsync(source, moveDataTypeRequestModel.TargetId, CurrentUserKey(_backOfficeSecurityAccessor)); + Attempt result = await _dataTypeService.MoveAsync(source, moveDataTypeRequestModel.Target?.Id, CurrentUserKey(_backOfficeSecurityAccessor)); return result.Success ? Ok() diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/ImportDictionaryController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/ImportDictionaryController.cs index 6305628663..4a8bedb513 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/ImportDictionaryController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/ImportDictionaryController.cs @@ -34,8 +34,8 @@ public class ImportDictionaryController : DictionaryControllerBase { Attempt result = await _dictionaryItemImportService .ImportDictionaryItemFromUdtFileAsync( - importDictionaryRequestModel.TemporaryFileId, - importDictionaryRequestModel.ParentId, + importDictionaryRequestModel.TemporaryFile.Id, + importDictionaryRequestModel.Parent?.Id, CurrentUserKey(_backOfficeSecurityAccessor)); return result.Status switch diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/Item/DictionaryItemControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/Item/DictionaryItemControllerBase.cs index 38371601c2..b83525ae7b 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/Item/DictionaryItemControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/Item/DictionaryItemControllerBase.cs @@ -1,12 +1,13 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Api.Management.Routing; +using Umbraco.Cms.Core; using Umbraco.Cms.Web.Common.Authorization; namespace Umbraco.Cms.Api.Management.Controllers.Dictionary.Item; [ApiController] -[VersionedApiBackOfficeRoute("dictionary")] +[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Item}/dictionary")] [ApiExplorerSettings(GroupName = "Dictionary")] [Authorize(Policy = "New" + AuthorizationPolicies.TreeAccessDictionary)] public class DictionaryItemControllerBase : ManagementApiControllerBase diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/Item/ItemDictionaryItemController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/Item/ItemDictionaryItemController.cs index 133acf21fc..59588346d3 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/Item/ItemDictionaryItemController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/Item/ItemDictionaryItemController.cs @@ -20,7 +20,7 @@ public class ItemDictionaryItemController : DictionaryItemControllerBase _mapper = mapper; } - [HttpGet("item")] + [HttpGet] [MapToApiVersion("1.0")] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] public async Task Item([FromQuery(Name = "id")] HashSet ids) diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/MoveDictionaryController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/MoveDictionaryController.cs index 59e6fd90a4..b989b335bb 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/MoveDictionaryController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/MoveDictionaryController.cs @@ -37,7 +37,7 @@ public class MoveDictionaryController : DictionaryControllerBase Attempt result = await _dictionaryItemService.MoveAsync( source, - moveDictionaryRequestModel.TargetId, + moveDictionaryRequestModel.Target?.Id, CurrentUserKey(_backOfficeSecurityAccessor)); return result.Success diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Document/Item/DocumentItemControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Document/Item/DocumentItemControllerBase.cs index 6b3bf2fdc4..406fdde38c 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Document/Item/DocumentItemControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Document/Item/DocumentItemControllerBase.cs @@ -7,7 +7,7 @@ using Umbraco.Cms.Web.Common.Authorization; namespace Umbraco.Cms.Api.Management.Controllers.Document.Item; [ApiController] -[VersionedApiBackOfficeRoute(Constants.UdiEntityType.Document)] +[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Item}/{Constants.UdiEntityType.Document}")] [ApiExplorerSettings(GroupName = nameof(Constants.UdiEntityType.Document))] [Authorize(Policy = "New" + AuthorizationPolicies.TreeAccessDocuments)] public class DocumentItemControllerBase : ManagementApiControllerBase diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Document/Item/ItemDocumentItemController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Document/Item/ItemDocumentItemController.cs index 04c057291d..62a9552954 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Document/Item/ItemDocumentItemController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Document/Item/ItemDocumentItemController.cs @@ -21,7 +21,7 @@ public class ItemDocumentItemController : DocumentItemControllerBase _documentPresentationFactory = documentPresentationFactory; } - [HttpGet("item")] + [HttpGet] [MapToApiVersion("1.0")] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] public async Task Item([FromQuery(Name = "id")] HashSet ids) diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Document/SortDocumentController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Document/SortDocumentController.cs index 80e7bccda9..fe2dbfac53 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Document/SortDocumentController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Document/SortDocumentController.cs @@ -40,7 +40,7 @@ public class SortDocumentController : DocumentControllerBase { AuthorizationResult authorizationResult = await _authorizationService.AuthorizeResourceAsync( User, - ContentPermissionResource.WithKeys(ActionSort.ActionLetter, new List(sortingRequestModel.Sorting.Select(x => x.Id).Cast()) { sortingRequestModel.ParentId }), + ContentPermissionResource.WithKeys(ActionSort.ActionLetter, new List(sortingRequestModel.Sorting.Select(x => x.Id).Cast()) { sortingRequestModel.Parent?.Id }), AuthorizationPolicies.ContentPermissionByResource); if (!authorizationResult.Succeeded) @@ -49,7 +49,7 @@ public class SortDocumentController : DocumentControllerBase } ContentEditingOperationStatus result = await _contentEditingService.SortAsync( - sortingRequestModel.ParentId, + sortingRequestModel.Parent?.Id, sortingRequestModel.Sorting.Select(m => new SortingModel { Key = m.Id, SortOrder = m.SortOrder }), CurrentUserKey(_backOfficeSecurityAccessor)); diff --git a/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Item/DocumentBlueprintItemControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Item/DocumentBlueprintItemControllerBase.cs index 3953071e40..8c2bd7efe3 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Item/DocumentBlueprintItemControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Item/DocumentBlueprintItemControllerBase.cs @@ -7,7 +7,7 @@ using Umbraco.Cms.Web.Common.Authorization; namespace Umbraco.Cms.Api.Management.Controllers.DocumentBlueprint.Item; [ApiController] -[VersionedApiBackOfficeRoute($"{Constants.UdiEntityType.DocumentBlueprint}")] +[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Item}/{Constants.UdiEntityType.DocumentBlueprint}")] [ApiExplorerSettings(GroupName = "Document Blueprint")] [Authorize(Policy = "New" + AuthorizationPolicies.SectionAccessContent)] public class DocumentBlueprintItemControllerBase : ManagementApiControllerBase diff --git a/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Item/ItemDocumentBlueprintController.cs b/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Item/ItemDocumentBlueprintController.cs index 41a16ee037..f3f66d7563 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Item/ItemDocumentBlueprintController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Item/ItemDocumentBlueprintController.cs @@ -22,13 +22,13 @@ public class ItemDocumentBlueprintController : DocumentBlueprintItemControllerBa _documentPresentationFactory = documentPresentationFactory; } - [HttpGet("item")] + [HttpGet] [MapToApiVersion("1.0")] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] public async Task Item([FromQuery(Name = "id")] HashSet ids) { IEnumerable documents = _entityService.GetAll(UmbracoObjectTypes.Document, ids.ToArray()).Select(x => x as IDocumentEntitySlim).WhereNotNull(); IEnumerable responseModels = documents.Select(x => _documentPresentationFactory.CreateBlueprintItemResponseModel(x)); - return Ok(responseModels); + return await Task.FromResult(Ok(responseModels)); } } diff --git a/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Tree/DocumentBlueprintTreeControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Tree/DocumentBlueprintTreeControllerBase.cs index 4112fe3bd3..85865b83b9 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Tree/DocumentBlueprintTreeControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Tree/DocumentBlueprintTreeControllerBase.cs @@ -5,6 +5,7 @@ using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Models.Entities; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Api.Management.Controllers.Tree; +using Umbraco.Cms.Api.Management.Factories; using Umbraco.Cms.Api.Management.ViewModels.Tree; using Umbraco.Cms.Api.Management.Routing; using Umbraco.Cms.Web.Common.Authorization; @@ -17,39 +18,25 @@ namespace Umbraco.Cms.Api.Management.Controllers.DocumentBlueprint.Tree; [Authorize(Policy = "New" + AuthorizationPolicies.SectionAccessContent)] public class DocumentBlueprintTreeControllerBase : NamedEntityTreeControllerBase { - private readonly IContentTypeService _contentTypeService; + private readonly IDocumentPresentationFactory _documentPresentationFactory; - public DocumentBlueprintTreeControllerBase(IEntityService entityService, IContentTypeService contentTypeService) - : base(entityService) => - _contentTypeService = contentTypeService; + public DocumentBlueprintTreeControllerBase(IEntityService entityService, IDocumentPresentationFactory documentPresentationFactory) + : base(entityService) + => _documentPresentationFactory = documentPresentationFactory; protected override UmbracoObjectTypes ItemObjectType => UmbracoObjectTypes.DocumentBlueprint; protected override DocumentBlueprintTreeItemResponseModel[] MapTreeItemViewModels(Guid? parentId, IEntitySlim[] entities) { - var contentTypeAliases = entities + IDocumentEntitySlim[] documentEntities = entities .OfType() - .Select(entity => entity.ContentTypeAlias) .ToArray(); - var contentTypeIds = _contentTypeService.GetAllContentTypeIds(contentTypeAliases).ToArray(); - var contentTypeByAlias = _contentTypeService - .GetAll(contentTypeIds) - .ToDictionary(contentType => contentType.Alias); - - return entities.Select(entity => + return documentEntities.Select(entity => { DocumentBlueprintTreeItemResponseModel responseModel = base.MapTreeItemViewModel(parentId, entity); responseModel.HasChildren = false; - - if (entity is IDocumentEntitySlim documentEntitySlim - && contentTypeByAlias.TryGetValue(documentEntitySlim.ContentTypeAlias, out IContentType? contentType)) - { - responseModel.DocumentTypeId = contentType.Key; - responseModel.DocumentTypeAlias = contentType.Alias; - responseModel.DocumentTypeName = contentType.Name; - } - + responseModel.DocumentType = _documentPresentationFactory.CreateDocumentTypeReferenceResponseModel(entity); return responseModel; }).ToArray(); } diff --git a/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Tree/RootDocumentBlueprintTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Tree/RootDocumentBlueprintTreeController.cs index 04e188acde..09e7cc87a5 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Tree/RootDocumentBlueprintTreeController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Tree/RootDocumentBlueprintTreeController.cs @@ -3,6 +3,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Api.Common.ViewModels.Pagination; +using Umbraco.Cms.Api.Management.Factories; using Umbraco.Cms.Api.Management.ViewModels.Tree; namespace Umbraco.Cms.Api.Management.Controllers.DocumentBlueprint.Tree; @@ -10,8 +11,8 @@ namespace Umbraco.Cms.Api.Management.Controllers.DocumentBlueprint.Tree; [ApiVersion("1.0")] public class RootDocumentBlueprintTreeController : DocumentBlueprintTreeControllerBase { - public RootDocumentBlueprintTreeController(IEntityService entityService, IContentTypeService contentTypeService) - : base(entityService, contentTypeService) + public RootDocumentBlueprintTreeController(IEntityService entityService, IDocumentPresentationFactory documentPresentationFactory) + : base(entityService, documentPresentationFactory) { } diff --git a/src/Umbraco.Cms.Api.Management/Controllers/DocumentType/Item/DocumentTypeItemControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/DocumentType/Item/DocumentTypeItemControllerBase.cs index 6291307c0e..46545bced5 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/DocumentType/Item/DocumentTypeItemControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/DocumentType/Item/DocumentTypeItemControllerBase.cs @@ -7,10 +7,9 @@ using Umbraco.Cms.Web.Common.Authorization; namespace Umbraco.Cms.Api.Management.Controllers.DocumentType.Item; [ApiController] -[VersionedApiBackOfficeRoute(Constants.UdiEntityType.DocumentType)] +[VersionedApiBackOfficeRoute( $"{Constants.Web.RoutePath.Item}/{Constants.UdiEntityType.DocumentType}")] [ApiExplorerSettings(GroupName = "Document Type")] [Authorize(Policy = "New" + AuthorizationPolicies.TreeAccessDocumentTypes)] public class DocumentTypeItemControllerBase : ManagementApiControllerBase { - } diff --git a/src/Umbraco.Cms.Api.Management/Controllers/DocumentType/Item/ItemDocumentTypeItemController.cs b/src/Umbraco.Cms.Api.Management/Controllers/DocumentType/Item/ItemDocumentTypeItemController.cs index e6c75d2d2a..712faf786a 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/DocumentType/Item/ItemDocumentTypeItemController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/DocumentType/Item/ItemDocumentTypeItemController.cs @@ -20,13 +20,13 @@ public class ItemDocumentTypeItemController : DocumentTypeItemControllerBase _mapper = mapper; } - [HttpGet("item")] + [HttpGet] [MapToApiVersion("1.0")] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] public async Task Item([FromQuery(Name = "id")] HashSet ids) { IEnumerable contentTypes = _contentTypeService.GetAll(ids); List responseModels = _mapper.MapEnumerable(contentTypes); - return Ok(responseModels); + return await Task.FromResult(Ok(responseModels)); } } diff --git a/src/Umbraco.Cms.Api.Management/Controllers/FolderManagementControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/FolderManagementControllerBase.cs index 9c6c9da084..c1ddef55a6 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/FolderManagementControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/FolderManagementControllerBase.cs @@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Api.Common.Builders; +using Umbraco.Cms.Api.Management.ViewModels; using Umbraco.Cms.Api.Management.ViewModels.Folder; using Umbraco.Cms.Core; using Umbraco.Cms.Core.Models; @@ -41,7 +42,7 @@ public abstract class FolderManagementControllerBase : ManagementAp { Name = container.Name!, Id = container.Key, - ParentId = parentContainer?.Key + Parent = ReferenceByIdModel.ReferenceOrNull(parentContainer?.Key) }); } @@ -52,7 +53,7 @@ public abstract class FolderManagementControllerBase : ManagementAp Attempt result = await _treeEntityTypeContainerService.CreateAsync( createFolderRequestModel.Id, createFolderRequestModel.Name, - createFolderRequestModel.ParentId, + createFolderRequestModel.Parent?.Id, CurrentUserKey(_backOfficeSecurityAccessor)); return result.Success diff --git a/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/ExecuteActionHealthCheckController.cs b/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/ExecuteActionHealthCheckController.cs index 01b07f08db..51ddb571e2 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/ExecuteActionHealthCheckController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/ExecuteActionHealthCheckController.cs @@ -40,7 +40,7 @@ public class ExecuteActionHealthCheckController : HealthCheckControllerBase [ProducesResponseType(typeof(HealthCheckResultResponseModel), StatusCodes.Status200OK)] public async Task> ExecuteAction(HealthCheckActionRequestModel action) { - Guid healthCheckKey = action.HealthCheckId; + Guid healthCheckKey = action.HealthCheck.Id; Core.HealthChecks.HealthCheck? healthCheck = _healthChecks .Where(x => _disabledCheckIds.Contains(healthCheckKey) == false) diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Language/Item/ItemsLanguageEntityController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Language/Item/ItemsLanguageEntityController.cs index 4d2f771c9b..b79b4f491c 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Language/Item/ItemsLanguageEntityController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Language/Item/ItemsLanguageEntityController.cs @@ -20,7 +20,7 @@ public class ItemsLanguageEntityController : LanguageEntityControllerBase _mapper = mapper; } - [HttpGet("item")] + [HttpGet] [MapToApiVersion("1.0")] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] public async Task Items([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/LanguageEntityControllerBase.cs index 6de6aa650c..dabaec4f85 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Language/Item/LanguageEntityControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Language/Item/LanguageEntityControllerBase.cs @@ -7,8 +7,8 @@ using Umbraco.Cms.Web.Common.Authorization; namespace Umbraco.Cms.Api.Management.Controllers.Language.Item; [ApiController] -[VersionedApiBackOfficeRoute($"{Constants.UdiEntityType.Language}")] -[ApiExplorerSettings(GroupName = "Language")] +[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Item}/{Constants.UdiEntityType.Language}")] +[ApiExplorerSettings(GroupName = nameof(Constants.UdiEntityType.Language))] [Authorize(Policy = "New" + AuthorizationPolicies.TreeAccessLanguages)] public class LanguageEntityControllerBase : ManagementApiControllerBase { diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Language/LanguageControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Language/LanguageControllerBase.cs index bf8d374c53..62b916c746 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Language/LanguageControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Language/LanguageControllerBase.cs @@ -2,13 +2,14 @@ using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Api.Common.Builders; using Umbraco.Cms.Api.Management.Routing; +using Umbraco.Cms.Core; using Umbraco.Cms.Core.Services.OperationStatus; namespace Umbraco.Cms.Api.Management.Controllers.Language; [ApiController] -[VersionedApiBackOfficeRoute("language")] -[ApiExplorerSettings(GroupName = "Language")] +[VersionedApiBackOfficeRoute(Constants.UdiEntityType.Language)] +[ApiExplorerSettings(GroupName = nameof(Constants.UdiEntityType.Language))] public abstract class LanguageControllerBase : ManagementApiControllerBase { protected IActionResult LanguageOperationStatusResult(LanguageOperationStatus status) => diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Media/Item/ItemMediaItemController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Media/Item/ItemMediaItemController.cs index 43dabbe4af..88bf16ade5 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Media/Item/ItemMediaItemController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Media/Item/ItemMediaItemController.cs @@ -22,7 +22,7 @@ public class ItemMediaItemController : MediaItemControllerBase _mediaPresentationFactory = mediaPresentationFactory; } - [HttpGet("item")] + [HttpGet] [MapToApiVersion("1.0")] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] public async Task Item([FromQuery(Name = "id")] HashSet ids) diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Media/Item/MediaItemControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Media/Item/MediaItemControllerBase.cs index 72a0b1bc3d..c35f234115 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Media/Item/MediaItemControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Media/Item/MediaItemControllerBase.cs @@ -9,7 +9,7 @@ namespace Umbraco.Cms.Api.Management.Controllers.Media.Item; [ApiVersion("1.0")] [ApiController] -[VersionedApiBackOfficeRoute($"{Constants.UdiEntityType.Media}")] +[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Item}/{Constants.UdiEntityType.Media}")] [ApiExplorerSettings(GroupName = nameof(Constants.UdiEntityType.Media))] [Authorize(Policy = "New" + AuthorizationPolicies.SectionAccessForMediaTree)] public class MediaItemControllerBase : ManagementApiControllerBase diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Media/SortMediaController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Media/SortMediaController.cs index 4fdd085864..07c2b7d550 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Media/SortMediaController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Media/SortMediaController.cs @@ -39,7 +39,7 @@ public class SortMediaController : MediaControllerBase { AuthorizationResult authorizationResult = await _authorizationService.AuthorizeResourceAsync( User, - MediaPermissionResource.WithKeys(new List(sortingRequestModel.Sorting.Select(x => x.Id).Cast()) { sortingRequestModel.ParentId }), + MediaPermissionResource.WithKeys(new List(sortingRequestModel.Sorting.Select(x => x.Id).Cast()) { sortingRequestModel.Parent?.Id }), AuthorizationPolicies.MediaPermissionByResource); if (!authorizationResult.Succeeded) { @@ -47,7 +47,7 @@ public class SortMediaController : MediaControllerBase } ContentEditingOperationStatus result = await _mediaEditingService.SortAsync( - sortingRequestModel.ParentId, + sortingRequestModel.Parent?.Id, sortingRequestModel.Sorting.Select(m => new SortingModel { Key = m.Id, SortOrder = m.SortOrder }), CurrentUserKey(_backOfficeSecurityAccessor)); diff --git a/src/Umbraco.Cms.Api.Management/Controllers/MediaType/Item/ItemMediaTypeItemController.cs b/src/Umbraco.Cms.Api.Management/Controllers/MediaType/Item/ItemMediaTypeItemController.cs index 7fdfe38956..f9772c5a2f 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/MediaType/Item/ItemMediaTypeItemController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/MediaType/Item/ItemMediaTypeItemController.cs @@ -20,13 +20,13 @@ public class ItemMediaTypeItemController : MediaTypeItemControllerBase _mapper = mapper; } - [HttpGet("item")] + [HttpGet] [MapToApiVersion("1.0")] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] public async Task Item([FromQuery(Name = "id")] HashSet ids) { IEnumerable mediaTypes = _mediaTypeService.GetAll(ids); List responseModels = _mapper.MapEnumerable(mediaTypes); - return Ok(responseModels); + return await Task.FromResult(Ok(responseModels)); } } diff --git a/src/Umbraco.Cms.Api.Management/Controllers/MediaType/Item/MediaTypeItemControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/MediaType/Item/MediaTypeItemControllerBase.cs index 9d8bfec1fe..2285eb0090 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/MediaType/Item/MediaTypeItemControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/MediaType/Item/MediaTypeItemControllerBase.cs @@ -7,7 +7,7 @@ using Umbraco.Cms.Web.Common.Authorization; namespace Umbraco.Cms.Api.Management.Controllers.MediaType.Item; [ApiController] -[VersionedApiBackOfficeRoute(Constants.UdiEntityType.MediaType)] +[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Item}/{Constants.UdiEntityType.MediaType}")] [ApiExplorerSettings(GroupName = "Media Type")] [Authorize(Policy = "New" + AuthorizationPolicies.TreeAccessMediaTypes)] public class MediaTypeItemControllerBase : ManagementApiControllerBase diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Member/Item/ItemMemberItemController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Member/Item/ItemMemberItemController.cs index 8d1b77d0cf..c44875d6be 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Member/Item/ItemMemberItemController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Member/Item/ItemMemberItemController.cs @@ -22,7 +22,7 @@ public class ItemMemberItemController : MemberItemControllerBase _memberPresentationFactory = memberPresentationFactory; } - [HttpGet("item")] + [HttpGet] [MapToApiVersion("1.0")] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] public async Task Item([FromQuery(Name = "id")] HashSet ids) diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Member/Item/MemberItemControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Member/Item/MemberItemControllerBase.cs index 0f63a0f314..639a104ef2 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Member/Item/MemberItemControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Member/Item/MemberItemControllerBase.cs @@ -7,8 +7,8 @@ using Umbraco.Cms.Web.Common.Authorization; namespace Umbraco.Cms.Api.Management.Controllers.Member.Item; [ApiController] -[VersionedApiBackOfficeRoute($"{Constants.UdiEntityType.Member}")] -[ApiExplorerSettings(GroupName = "Member")] +[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Item}/{Constants.UdiEntityType.Member}")] +[ApiExplorerSettings(GroupName = nameof(Constants.UdiEntityType.Member))] [Authorize(Policy = "New" + AuthorizationPolicies.SectionAccessForMemberTree)] public class MemberItemControllerBase : ManagementApiControllerBase { diff --git a/src/Umbraco.Cms.Api.Management/Controllers/MemberGroup/Item/ItemMemberGroupItemController.cs b/src/Umbraco.Cms.Api.Management/Controllers/MemberGroup/Item/ItemMemberGroupItemController.cs index 9e944f7d95..a6292350ad 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/MemberGroup/Item/ItemMemberGroupItemController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/MemberGroup/Item/ItemMemberGroupItemController.cs @@ -22,7 +22,7 @@ public class ItemMemberGroupItemController : MemberGroupItemControllerBase _mapper = mapper; } - [HttpGet("item")] + [HttpGet] [MapToApiVersion("1.0")] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] public async Task Item([FromQuery(Name = "id")] HashSet ids) diff --git a/src/Umbraco.Cms.Api.Management/Controllers/MemberGroup/Item/MemberGroupItemControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/MemberGroup/Item/MemberGroupItemControllerBase.cs index 7a01998885..9ee8a40c5b 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/MemberGroup/Item/MemberGroupItemControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/MemberGroup/Item/MemberGroupItemControllerBase.cs @@ -7,10 +7,9 @@ using Umbraco.Cms.Web.Common.Authorization; namespace Umbraco.Cms.Api.Management.Controllers.MemberGroup.Item; [ApiController] -[VersionedApiBackOfficeRoute($"{Constants.UdiEntityType.MemberGroup}")] +[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Item}/{Constants.UdiEntityType.MemberGroup}")] [ApiExplorerSettings(GroupName = "Member Group")] [Authorize(Policy = "New" + AuthorizationPolicies.TreeAccessMemberGroups)] public class MemberGroupItemControllerBase : ManagementApiControllerBase { - } diff --git a/src/Umbraco.Cms.Api.Management/Controllers/MemberType/Item/ItemMemberTypeItemController.cs b/src/Umbraco.Cms.Api.Management/Controllers/MemberType/Item/ItemMemberTypeItemController.cs index 53b72c8dd3..2b906ce1df 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/MemberType/Item/ItemMemberTypeItemController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/MemberType/Item/ItemMemberTypeItemController.cs @@ -20,7 +20,7 @@ public class ItemMemberTypeItemController : MemberTypeItemControllerBase _memberTypeService = memberTypeService; } - [HttpGet("item")] + [HttpGet] [MapToApiVersion("1.0")] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] public async Task Item([FromQuery(Name = "id")] HashSet ids) diff --git a/src/Umbraco.Cms.Api.Management/Controllers/MemberType/Item/MemberTypeItemControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/MemberType/Item/MemberTypeItemControllerBase.cs index f3df9b8247..977e0d732a 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/MemberType/Item/MemberTypeItemControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/MemberType/Item/MemberTypeItemControllerBase.cs @@ -7,7 +7,7 @@ using Umbraco.Cms.Web.Common.Authorization; namespace Umbraco.Cms.Api.Management.Controllers.MemberType.Item; [ApiController] -[VersionedApiBackOfficeRoute($"{Constants.UdiEntityType.MemberType}")] +[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Item}/{Constants.UdiEntityType.MemberType}")] [ApiExplorerSettings(GroupName = "Member Type")] [Authorize(Policy = "New" + AuthorizationPolicies.TreeAccessMemberTypes)] public class MemberTypeItemControllerBase : ManagementApiControllerBase diff --git a/src/Umbraco.Cms.Api.Management/Controllers/PartialView/Item/ItemPartialViewItemController.cs b/src/Umbraco.Cms.Api.Management/Controllers/PartialView/Item/ItemPartialViewItemController.cs index 69a4192c7a..3b87cb44f0 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/PartialView/Item/ItemPartialViewItemController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/PartialView/Item/ItemPartialViewItemController.cs @@ -15,7 +15,7 @@ public class ItemPartialViewItemController : PartialViewItemControllerBase public ItemPartialViewItemController(IFileItemPresentationFactory fileItemPresentationFactory) => _fileItemPresentationFactory = fileItemPresentationFactory; - [HttpGet("item")] + [HttpGet] [MapToApiVersion("1.0")] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] public async Task Item([FromQuery(Name = "path")] HashSet paths) diff --git a/src/Umbraco.Cms.Api.Management/Controllers/PartialView/Item/PartialViewItemControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/PartialView/Item/PartialViewItemControllerBase.cs index f844fc72a6..9cc03353e2 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/PartialView/Item/PartialViewItemControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/PartialView/Item/PartialViewItemControllerBase.cs @@ -7,7 +7,7 @@ using Umbraco.Cms.Web.Common.Authorization; namespace Umbraco.Cms.Api.Management.Controllers.PartialView.Item; [ApiController] -[VersionedApiBackOfficeRoute($"{Constants.UdiEntityType.PartialView}")] +[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Item}/{Constants.UdiEntityType.PartialView}")] [ApiExplorerSettings(GroupName = "Partial View")] [Authorize(Policy = "New" + AuthorizationPolicies.TreeAccessPartialViews)] public class PartialViewItemControllerBase : ManagementApiControllerBase diff --git a/src/Umbraco.Cms.Api.Management/Controllers/RelationType/Item/ItemRelationTypeItemController.cs b/src/Umbraco.Cms.Api.Management/Controllers/RelationType/Item/ItemRelationTypeItemController.cs index 90c5fcc280..c8e3541b49 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/RelationType/Item/ItemRelationTypeItemController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/RelationType/Item/ItemRelationTypeItemController.cs @@ -20,7 +20,7 @@ public class ItemRelationTypeItemController : RelationTypeItemControllerBase _mapper = mapper; } - [HttpGet("item")] + [HttpGet] [MapToApiVersion("1.0")] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] public async Task Item([FromQuery(Name = "id")] HashSet ids) @@ -33,6 +33,6 @@ public class ItemRelationTypeItemController : RelationTypeItemControllerBase List responseModels = _mapper.MapEnumerable(relationTypes); - return Ok(responseModels); + return await Task.FromResult(Ok(responseModels)); } } diff --git a/src/Umbraco.Cms.Api.Management/Controllers/RelationType/Item/RelationTypeItemControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/RelationType/Item/RelationTypeItemControllerBase.cs index 13be145489..b6efa387b0 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/RelationType/Item/RelationTypeItemControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/RelationType/Item/RelationTypeItemControllerBase.cs @@ -7,10 +7,9 @@ using Umbraco.Cms.Web.Common.Authorization; namespace Umbraco.Cms.Api.Management.Controllers.RelationType.Item; [ApiController] -[VersionedApiBackOfficeRoute($"{Constants.UdiEntityType.RelationType}")] +[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Item}/{Constants.UdiEntityType.RelationType}")] [ApiExplorerSettings(GroupName = "Relation Type")] [Authorize(Policy = "New" + AuthorizationPolicies.TreeAccessRelationTypes)] public class RelationTypeItemControllerBase : ManagementApiControllerBase { - } diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Script/Item/ItemScriptItemController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Script/Item/ItemScriptItemController.cs index 3ad4b09828..9bac6e66bb 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Script/Item/ItemScriptItemController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Script/Item/ItemScriptItemController.cs @@ -15,7 +15,7 @@ public class ItemScriptItemController : ScriptItemControllerBase public ItemScriptItemController(IFileItemPresentationFactory fileItemPresentationFactory) => _fileItemPresentationFactory = fileItemPresentationFactory; - [HttpGet("item")] + [HttpGet] [MapToApiVersion("1.0")] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] public async Task Item([FromQuery(Name = "path")] HashSet paths) diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Script/Item/ScriptItemControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Script/Item/ScriptItemControllerBase.cs index 45b517030c..5797e33e24 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Script/Item/ScriptItemControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Script/Item/ScriptItemControllerBase.cs @@ -7,7 +7,7 @@ using Umbraco.Cms.Web.Common.Authorization; namespace Umbraco.Cms.Api.Management.Controllers.Script.Item; [ApiController] -[VersionedApiBackOfficeRoute($"{Constants.UdiEntityType.Script}")] +[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Item}/{Constants.UdiEntityType.Script}")] [ApiExplorerSettings(GroupName = nameof(Constants.UdiEntityType.Script))] [Authorize(Policy = "New" + AuthorizationPolicies.TreeAccessScripts)] public class ScriptItemControllerBase : ManagementApiControllerBase diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Security/ResetPasswordTokenController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Security/ResetPasswordTokenController.cs index bac2ee1064..57a733adc3 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Security/ResetPasswordTokenController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Security/ResetPasswordTokenController.cs @@ -27,7 +27,7 @@ public class ResetPasswordTokenController : SecurityControllerBase [UserPasswordEnsureMinimumResponseTime] public async Task ResetPasswordToken(ResetPasswordTokenRequestModel model) { - Attempt result = await _userService.ResetPasswordAsync(model.UserId, model.ResetCode, model.Password); + Attempt result = await _userService.ResetPasswordAsync(model.User.Id, model.ResetCode, model.Password); return result.Success ? NoContent() diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Security/VerifyResetPasswordTokenController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Security/VerifyResetPasswordTokenController.cs index f806a62f79..0c432134e8 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Security/VerifyResetPasswordTokenController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Security/VerifyResetPasswordTokenController.cs @@ -26,7 +26,7 @@ public class VerifyResetPasswordTokenController : SecurityControllerBase [UserPasswordEnsureMinimumResponseTime] public async Task VerifyResetPasswordToken(VerifyResetPasswordTokenRequestModel model) { - Attempt result = await _userService.VerifyPasswordResetAsync(model.UserId, model.ResetCode); + Attempt result = await _userService.VerifyPasswordResetAsync(model.User.Id, model.ResetCode); return result.Success ? NoContent() 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 4d7bd314fe..0b903e005b 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/StaticFile/Item/ItemStaticFileItemController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/StaticFile/Item/ItemStaticFileItemController.cs @@ -15,7 +15,7 @@ public class ItemStaticFileItemController : StaticFileItemControllerBase public ItemStaticFileItemController(IFileItemPresentationFactory fileItemPresentationFactory) => _fileItemPresentationFactory = fileItemPresentationFactory; - [HttpGet("item")] + [HttpGet] [MapToApiVersion("1.0")] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] public async Task Item([FromQuery(Name = "path")] HashSet paths) 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 849d28174e..6255da9183 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/StaticFile/Item/StaticFileItemControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/StaticFile/Item/StaticFileItemControllerBase.cs @@ -1,10 +1,11 @@ using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Api.Management.Routing; +using Umbraco.Cms.Core; namespace Umbraco.Cms.Api.Management.Controllers.StaticFile.Item; [ApiController] -[VersionedApiBackOfficeRoute("static-file")] +[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Item}/static-file")] [ApiExplorerSettings(GroupName = "Static File")] public class StaticFileItemControllerBase : ManagementApiControllerBase { diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Stylesheet/Item/ItemStylesheetItemController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Stylesheet/Item/ItemStylesheetItemController.cs index d4da446255..28e08716e1 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Stylesheet/Item/ItemStylesheetItemController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Stylesheet/Item/ItemStylesheetItemController.cs @@ -15,7 +15,7 @@ public class ItemStylesheetItemController : StylesheetItemControllerBase public ItemStylesheetItemController(IFileItemPresentationFactory fileItemPresentationFactory) => _fileItemPresentationFactory = fileItemPresentationFactory; - [HttpGet("item")] + [HttpGet] [MapToApiVersion("1.0")] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] public async Task Item([FromQuery(Name = "path")] HashSet paths) diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Stylesheet/Item/StylesheetItemControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Stylesheet/Item/StylesheetItemControllerBase.cs index 00806838a9..d528852513 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Stylesheet/Item/StylesheetItemControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Stylesheet/Item/StylesheetItemControllerBase.cs @@ -7,10 +7,9 @@ using Umbraco.Cms.Web.Common.Authorization; namespace Umbraco.Cms.Api.Management.Controllers.Stylesheet.Item; [ApiController] -[VersionedApiBackOfficeRoute($"{Constants.UdiEntityType.Stylesheet}")] +[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Item}/{Constants.UdiEntityType.Stylesheet}")] [ApiExplorerSettings(GroupName = nameof(Constants.UdiEntityType.Stylesheet))] [Authorize(Policy = "New" + AuthorizationPolicies.TreeAccessStylesheets)] public class StylesheetItemControllerBase : ManagementApiControllerBase { - } diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Template/CreateTemplateController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Template/CreateTemplateController.cs index b04fa462f9..4c02ef9f2d 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Template/CreateTemplateController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Template/CreateTemplateController.cs @@ -36,7 +36,7 @@ public class CreateTemplateController : TemplateControllerBase requestModel.Alias, requestModel.Content, CurrentUserKey(_backOfficeSecurityAccessor), - requestModel.Key); + requestModel.Id); return result.Success ? CreatedAtId(controller => nameof(controller.ByKey), result.Result.Key) diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Template/Item/ItemTemplateItemController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Template/Item/ItemTemplateItemController.cs index 9f541dc9d7..c2caeca29e 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Template/Item/ItemTemplateItemController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Template/Item/ItemTemplateItemController.cs @@ -4,7 +4,6 @@ using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Api.Management.ViewModels.Template.Item; using Umbraco.Cms.Core.Mapping; using Umbraco.Cms.Core.Models; -using Umbraco.Cms.Core.Models.Entities; using Umbraco.Cms.Core.Services; namespace Umbraco.Cms.Api.Management.Controllers.Template.Item; @@ -21,7 +20,7 @@ public class ItemTemplateItemController : TemplateItemControllerBase _templateService = templateService; } - [HttpGet("item")] + [HttpGet] [MapToApiVersion("1.0")] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] public async Task Item([FromQuery(Name = "id")] HashSet ids) diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Template/Item/TemplateItemControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Template/Item/TemplateItemControllerBase.cs index 415690fc75..c67181381b 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Template/Item/TemplateItemControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Template/Item/TemplateItemControllerBase.cs @@ -7,10 +7,9 @@ using Umbraco.Cms.Web.Common.Authorization; namespace Umbraco.Cms.Api.Management.Controllers.Template.Item; [ApiController] -[VersionedApiBackOfficeRoute($"{Constants.UdiEntityType.Template}")] +[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Item}/{Constants.UdiEntityType.Template}")] [ApiExplorerSettings(GroupName = nameof(Constants.UdiEntityType.Template))] [Authorize(Policy = "New" + AuthorizationPolicies.TreeAccessTemplates)] public class TemplateItemControllerBase : ManagementApiControllerBase { - } diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Template/Query/ExecuteTemplateQueryController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Template/Query/ExecuteTemplateQueryController.cs index 17dbf80dcb..f4dc6866ee 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Template/Query/ExecuteTemplateQueryController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Template/Query/ExecuteTemplateQueryController.cs @@ -84,10 +84,10 @@ public class ExecuteTemplateQueryController : TemplateQueryControllerBase { IPublishedContent? rootContent; - if (model.RootContentId != null && model.RootContentId != Guid.Empty) + if (model.RootDocument?.Id is not null) { - rootContent = _publishedContentQuery.Content(model.RootContentId); - queryExpression.Append($"Umbraco.Content(Guid.Parse(\"{model.RootContentId}\"))"); + rootContent = _publishedContentQuery.Content(model.RootDocument.Id); + queryExpression.Append($"Umbraco.Content(Guid.Parse(\"{model.RootDocument.Id}\"))"); } else { @@ -102,12 +102,12 @@ public class ExecuteTemplateQueryController : TemplateQueryControllerBase { queryExpression.Append(_indent); - if (model.ContentTypeAlias.IsNullOrWhiteSpace() == false) + if (model.DocumentTypeAlias.IsNullOrWhiteSpace() == false) { - queryExpression.Append($".ChildrenOfType(\"{model.ContentTypeAlias}\")"); + queryExpression.Append($".ChildrenOfType(\"{model.DocumentTypeAlias}\")"); return rootContent == null ? Enumerable.Empty() - : rootContent.ChildrenOfType(_variationContextAccessor, model.ContentTypeAlias); + : rootContent.ChildrenOfType(_variationContextAccessor, model.DocumentTypeAlias); } queryExpression.Append(".Children()"); diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Template/Query/SettingsTemplateQueryController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Template/Query/SettingsTemplateQueryController.cs index fe33a15075..1b47317169 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Template/Query/SettingsTemplateQueryController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Template/Query/SettingsTemplateQueryController.cs @@ -31,7 +31,7 @@ public class SettingsTemplateQueryController : TemplateQueryControllerBase return await Task.FromResult(Ok(new TemplateQuerySettingsResponseModel { - ContentTypeAliases = contentTypeAliases, + DocumentTypeAliases = contentTypeAliases, Properties = properties, Operators = operators })); diff --git a/src/Umbraco.Cms.Api.Management/Controllers/User/CreateInitialPasswordUserController.cs b/src/Umbraco.Cms.Api.Management/Controllers/User/CreateInitialPasswordUserController.cs index a53d13dfd8..155b712fb7 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/User/CreateInitialPasswordUserController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/User/CreateInitialPasswordUserController.cs @@ -26,7 +26,7 @@ public class CreateInitialPasswordUserController : UserControllerBase [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status404NotFound)] public async Task CreateInitialPassword(CreateInitialPasswordUserRequestModel model) { - Attempt response = await _userService.CreateInitialPasswordAsync(model.UserId, model.Token, model.Password); + Attempt response = await _userService.CreateInitialPasswordAsync(model.User.Id, model.Token, model.Password); return response.Success ? Ok() diff --git a/src/Umbraco.Cms.Api.Management/Controllers/User/Current/SetAvatarCurrentUserController.cs b/src/Umbraco.Cms.Api.Management/Controllers/User/Current/SetAvatarCurrentUserController.cs index 1431f479f3..2b764cc6b6 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/User/Current/SetAvatarCurrentUserController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/User/Current/SetAvatarCurrentUserController.cs @@ -46,7 +46,7 @@ public class SetAvatarCurrentUserController : CurrentUserControllerBase return Forbidden(); } - UserOperationStatus result = await _userService.SetAvatarAsync(userKey, model.FileId); + UserOperationStatus result = await _userService.SetAvatarAsync(userKey, model.File.Id); return result is UserOperationStatus.Success ? Ok() diff --git a/src/Umbraco.Cms.Api.Management/Controllers/User/Item/ItemUserItemController.cs b/src/Umbraco.Cms.Api.Management/Controllers/User/Item/ItemUserItemController.cs index 735500a657..3a790d3fed 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/User/Item/ItemUserItemController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/User/Item/ItemUserItemController.cs @@ -20,7 +20,7 @@ public class ItemUserItemController : UserItemControllerBase _mapper = mapper; } - [HttpGet("item")] + [HttpGet] [MapToApiVersion("1.0")] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] public async Task Item([FromQuery(Name = "id")] HashSet ids) diff --git a/src/Umbraco.Cms.Api.Management/Controllers/User/Item/UserItemControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/User/Item/UserItemControllerBase.cs index 6047d73eff..8954621f9a 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/User/Item/UserItemControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/User/Item/UserItemControllerBase.cs @@ -1,12 +1,13 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Api.Management.Routing; +using Umbraco.Cms.Core; using Umbraco.Cms.Web.Common.Authorization; namespace Umbraco.Cms.Api.Management.Controllers.User.Item; [ApiController] -[VersionedApiBackOfficeRoute("user")] +[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Item}/user")] [ApiExplorerSettings(GroupName = "User")] [Authorize(Policy = "New" + AuthorizationPolicies.SectionAccessUsers)] public class UserItemControllerBase : ManagementApiControllerBase diff --git a/src/Umbraco.Cms.Api.Management/Controllers/User/SetAvatarUserController.cs b/src/Umbraco.Cms.Api.Management/Controllers/User/SetAvatarUserController.cs index 4265183591..58972a5c7e 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/User/SetAvatarUserController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/User/SetAvatarUserController.cs @@ -39,7 +39,7 @@ public class SetAvatarUserController : UserControllerBase return Forbidden(); } - UserOperationStatus result = await _userService.SetAvatarAsync(id, model.FileId); + UserOperationStatus result = await _userService.SetAvatarAsync(id, model.File.Id); return result is UserOperationStatus.Success ? Ok() diff --git a/src/Umbraco.Cms.Api.Management/Controllers/User/VerifyInviteUserController.cs b/src/Umbraco.Cms.Api.Management/Controllers/User/VerifyInviteUserController.cs index 7fc30d6d7d..e1ba251974 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/User/VerifyInviteUserController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/User/VerifyInviteUserController.cs @@ -25,7 +25,7 @@ public class VerifyInviteUserController : UserControllerBase [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status404NotFound)] public async Task Invite(VerifyInviteUserRequestModel model) { - Attempt result = await _userService.VerifyInviteAsync(model.UserId, model.Token); + Attempt result = await _userService.VerifyInviteAsync(model.User.Id, model.Token); return result.Success ? Ok() diff --git a/src/Umbraco.Cms.Api.Management/Controllers/UserGroup/Item/ItemUserGroupItemController.cs b/src/Umbraco.Cms.Api.Management/Controllers/UserGroup/Item/ItemUserGroupItemController.cs index 3e54df8cd2..a514b202f2 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/UserGroup/Item/ItemUserGroupItemController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/UserGroup/Item/ItemUserGroupItemController.cs @@ -20,7 +20,7 @@ public class ItemUserGroupItemController : UserGroupItemControllerBase _mapper = mapper; } - [HttpGet("item")] + [HttpGet] [MapToApiVersion("1.0")] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] public async Task Item([FromQuery(Name = "id")] HashSet ids) diff --git a/src/Umbraco.Cms.Api.Management/Controllers/UserGroup/Item/UserGroupItemControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/UserGroup/Item/UserGroupItemControllerBase.cs index 27a1782b27..898524619a 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/UserGroup/Item/UserGroupItemControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/UserGroup/Item/UserGroupItemControllerBase.cs @@ -1,12 +1,13 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Api.Management.Routing; +using Umbraco.Cms.Core; using Umbraco.Cms.Web.Common.Authorization; namespace Umbraco.Cms.Api.Management.Controllers.UserGroup.Item; [ApiController] -[VersionedApiBackOfficeRoute("user-group")] +[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Item}/user-group")] [ApiExplorerSettings(GroupName = "User Group")] [Authorize(Policy = "New" + AuthorizationPolicies.SectionAccessUsers)] public class UserGroupItemControllerBase : ManagementApiControllerBase diff --git a/src/Umbraco.Cms.Api.Management/DependencyInjection/DocumentBuilderExtensions.cs b/src/Umbraco.Cms.Api.Management/DependencyInjection/DocumentBuilderExtensions.cs index c99d4e65a4..497b2841a2 100644 --- a/src/Umbraco.Cms.Api.Management/DependencyInjection/DocumentBuilderExtensions.cs +++ b/src/Umbraco.Cms.Api.Management/DependencyInjection/DocumentBuilderExtensions.cs @@ -12,7 +12,7 @@ internal static class DocumentBuilderExtensions { builder.Services.AddTransient(); builder.Services.AddTransient(); - builder.Services.AddTransient(); + builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); diff --git a/src/Umbraco.Cms.Api.Management/Factories/AuditLogPresentationFactory.cs b/src/Umbraco.Cms.Api.Management/Factories/AuditLogPresentationFactory.cs index 8f69ec3bb4..64ada9d074 100644 --- a/src/Umbraco.Cms.Api.Management/Factories/AuditLogPresentationFactory.cs +++ b/src/Umbraco.Cms.Api.Management/Factories/AuditLogPresentationFactory.cs @@ -1,4 +1,5 @@ -using Umbraco.Cms.Api.Management.ViewModels.AuditLogs; +using Umbraco.Cms.Api.Management.ViewModels; +using Umbraco.Cms.Api.Management.ViewModels.AuditLogs; using Umbraco.Cms.Core.Cache; using Umbraco.Cms.Core.IO; using Umbraco.Cms.Core.Media; @@ -32,50 +33,38 @@ public class AuditLogPresentationFactory : IAuditLogPresentationFactory private AuditLogWithUsernameResponseModel CreateAuditLogWithUsernameViewModel(IAuditItem auditItem) { - IEntitySlim? entitySlim = _entityService.Get(auditItem.Id); + AuditLogWithUsernameResponseModel target = CreateResponseModel(auditItem, out IUser user); - var target = new AuditLogWithUsernameResponseModel - { - Comment = auditItem.Comment, - EntityType = auditItem.EntityType, - EntityId = entitySlim?.Key, - LogType = auditItem.AuditType, - Parameters = auditItem.Parameters, - Timestamp = auditItem.CreateDate, - }; - - IUser? user = _userService.GetUserById(auditItem.UserId); - if (user is null) - { - throw new ArgumentException($"Could not find user with id {auditItem.UserId}"); - } - - target.UserId = user.Key; target.UserAvatars = user.GetUserAvatarUrls(_appCaches.RuntimeCache, _mediaFileManager, _imageUrlGenerator); target.UserName = user.Name; return target; } private AuditLogResponseModel CreateAuditLogViewModel(IAuditItem auditItem) + => CreateResponseModel(auditItem, out _); + + private T CreateResponseModel(IAuditItem auditItem, out IUser user) + where T : AuditLogBaseModel, new() { + user = _userService.GetUserById(auditItem.UserId) + ?? throw new ArgumentException($"Could not find user with id {auditItem.UserId}"); + IEntitySlim? entitySlim = _entityService.Get(auditItem.Id); - var target = new AuditLogResponseModel - { - Comment = auditItem.Comment, - EntityType = auditItem.EntityType, - EntityId = entitySlim?.Key, - LogType = auditItem.AuditType, - Parameters = auditItem.Parameters, - Timestamp = auditItem.CreateDate, - }; - IUser? user = _userService.GetUserById(auditItem.UserId); - if (user is null) + return new T { - throw new ArgumentException($"Could not find user with id {auditItem.UserId}"); - } - - target.UserId = user.Key; - return target; + Comment = auditItem.Comment, + Entity = auditItem.EntityType is not null || entitySlim is not null + ? new AuditLogEntity + { + Id = entitySlim?.Key, + Type = auditItem.EntityType + } + : null, + LogType = auditItem.AuditType, + Parameters = auditItem.Parameters, + Timestamp = auditItem.CreateDate, + User = new ReferenceByIdModel(user.Key) + }; } } diff --git a/src/Umbraco.Cms.Api.Management/Factories/DataTypePresentationFactory.cs b/src/Umbraco.Cms.Api.Management/Factories/DataTypePresentationFactory.cs index e9fca2fd9f..32b8478d53 100644 --- a/src/Umbraco.Cms.Api.Management/Factories/DataTypePresentationFactory.cs +++ b/src/Umbraco.Cms.Api.Management/Factories/DataTypePresentationFactory.cs @@ -65,11 +65,11 @@ public class DataTypePresentationFactory : IDataTypePresentationFactory private async Task> GetParentId(CreateDataTypeRequestModel requestModel) { - if (requestModel.ParentId.HasValue) + if (requestModel.Parent is not null) { try { - var parent = await _dataTypeContainerService.GetAsync(requestModel.ParentId.Value); + var parent = await _dataTypeContainerService.GetAsync(requestModel.Parent.Id); return parent is null ? Attempt.FailWithStatus(DataTypeOperationStatus.ParentNotFound, 0) diff --git a/src/Umbraco.Cms.Api.Management/Factories/DictionaryPresentationFactory.cs b/src/Umbraco.Cms.Api.Management/Factories/DictionaryPresentationFactory.cs index 705f007114..65c97b1131 100644 --- a/src/Umbraco.Cms.Api.Management/Factories/DictionaryPresentationFactory.cs +++ b/src/Umbraco.Cms.Api.Management/Factories/DictionaryPresentationFactory.cs @@ -2,6 +2,7 @@ using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Api.Management.Models; +using Umbraco.Cms.Api.Management.ViewModels; using Umbraco.Cms.Api.Management.ViewModels.Dictionary; using Umbraco.Extensions; @@ -78,7 +79,12 @@ public class DictionaryPresentationFactory : IDictionaryPresentationFactory ? key : null; - return new ImportDictionaryItemsPresentationModel { Name = name, Id = itemKey, ParentId = parentKey }; + return new ImportDictionaryItemsPresentationModel + { + Name = name, + Id = itemKey, + Parent = ReferenceByIdModel.ReferenceOrNull(parentKey) + }; }) .WhereNotNull() .ToArray(), diff --git a/src/Umbraco.Cms.Api.Management/Factories/DocumentPresentationFactory.cs b/src/Umbraco.Cms.Api.Management/Factories/DocumentPresentationFactory.cs index d14fa8a74e..5aa05cc7c2 100644 --- a/src/Umbraco.Cms.Api.Management/Factories/DocumentPresentationFactory.cs +++ b/src/Umbraco.Cms.Api.Management/Factories/DocumentPresentationFactory.cs @@ -17,21 +17,21 @@ internal sealed class DocumentPresentationFactory : ContentPresentationFactoryBase, IDocumentPresentationFactory { private readonly IUmbracoMapper _umbracoMapper; - private readonly IContentUrlFactory _contentUrlFactory; + private readonly IDocumentUrlFactory _documentUrlFactory; private readonly IFileService _fileService; private readonly IContentTypeService _contentTypeService; private readonly IPublicAccessService _publicAccessService; public DocumentPresentationFactory( IUmbracoMapper umbracoMapper, - IContentUrlFactory contentUrlFactory, + IDocumentUrlFactory documentUrlFactory, IFileService fileService, IContentTypeService contentTypeService, IPublicAccessService publicAccessService) : base(contentTypeService, umbracoMapper) { _umbracoMapper = umbracoMapper; - _contentUrlFactory = contentUrlFactory; + _documentUrlFactory = documentUrlFactory; _fileService = fileService; _contentTypeService = contentTypeService; _publicAccessService = publicAccessService; @@ -41,7 +41,7 @@ internal sealed class DocumentPresentationFactory { DocumentResponseModel responseModel = _umbracoMapper.Map(content)!; - responseModel.Urls = await _contentUrlFactory.GetUrlsAsync(content); + responseModel.Urls = await _documentUrlFactory.GetUrlsAsync(content); Guid? templateKey = content.TemplateId.HasValue ? _fileService.GetTemplate(content.TemplateId.Value)?.Key @@ -94,7 +94,7 @@ internal sealed class DocumentPresentationFactory yield return new() { Name = entity.Name ?? string.Empty, - State = ContentStateHelper.GetContentState(entity, null), + State = DocumentVariantStateHelper.GetState(entity, null), Culture = null, }; yield break; @@ -106,7 +106,7 @@ internal sealed class DocumentPresentationFactory { Name = cultureNamePair.Value, Culture = cultureNamePair.Key, - State = ContentStateHelper.GetContentState(entity, cultureNamePair.Key) + State = DocumentVariantStateHelper.GetState(entity, cultureNamePair.Key) }; } } diff --git a/src/Umbraco.Cms.Api.Management/Factories/DocumentTypeEditingPresentationFactory.cs b/src/Umbraco.Cms.Api.Management/Factories/DocumentTypeEditingPresentationFactory.cs index 0aa3da8d27..b77363b698 100644 --- a/src/Umbraco.Cms.Api.Management/Factories/DocumentTypeEditingPresentationFactory.cs +++ b/src/Umbraco.Cms.Api.Management/Factories/DocumentTypeEditingPresentationFactory.cs @@ -1,9 +1,7 @@ using Umbraco.Cms.Api.Management.ViewModels.DocumentType; using Umbraco.Cms.Core.Models; -using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Models.ContentTypeEditing; using Umbraco.Cms.Core.Services; -using ContentTypeCleanupViewModel = Umbraco.Cms.Api.Management.ViewModels.ContentType.ContentTypeCleanup; namespace Umbraco.Cms.Api.Management.Factories; @@ -59,7 +57,7 @@ internal sealed class DocumentTypeEditingPresentationFactory : ContentTypeEditin public IEnumerable MapCompositionModels(IEnumerable compositionResults) => compositionResults.Select(MapCompositionModel); - private void MapCleanup(ContentTypeModelBase model, ContentTypeCleanupViewModel cleanup) + private void MapCleanup(ContentTypeModelBase model, DocumentTypeCleanup cleanup) => model.Cleanup = new ContentTypeCleanup { PreventCleanup = cleanup.PreventCleanup, diff --git a/src/Umbraco.Cms.Api.Management/Factories/ContentUrlFactory.cs b/src/Umbraco.Cms.Api.Management/Factories/DocumentUrlFactory.cs similarity index 87% rename from src/Umbraco.Cms.Api.Management/Factories/ContentUrlFactory.cs rename to src/Umbraco.Cms.Api.Management/Factories/DocumentUrlFactory.cs index 9327038b76..84beb18134 100644 --- a/src/Umbraco.Cms.Api.Management/Factories/ContentUrlFactory.cs +++ b/src/Umbraco.Cms.Api.Management/Factories/DocumentUrlFactory.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Logging; using Umbraco.Cms.Api.Management.ViewModels.Content; +using Umbraco.Cms.Api.Management.ViewModels.Document; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Models.PublishedContent; using Umbraco.Cms.Core.Routing; @@ -9,7 +10,7 @@ using Umbraco.Extensions; namespace Umbraco.Cms.Api.Management.Factories; -public class ContentUrlFactory : IContentUrlFactory +public class DocumentUrlFactory : IDocumentUrlFactory { private readonly IPublishedRouter _publishedRouter; private readonly IUmbracoContextAccessor _umbracoContextAccessor; @@ -21,7 +22,7 @@ public class ContentUrlFactory : IContentUrlFactory private readonly UriUtility _uriUtility; private readonly IPublishedUrlProvider _publishedUrlProvider; - public ContentUrlFactory( + public DocumentUrlFactory( IPublishedRouter publishedRouter, IUmbracoContextAccessor umbracoContextAccessor, ILanguageService languageService, @@ -43,7 +44,7 @@ public class ContentUrlFactory : IContentUrlFactory _publishedUrlProvider = publishedUrlProvider; } - public async Task> GetUrlsAsync(IContent content) + public async Task> GetUrlsAsync(IContent content) { IUmbracoContext umbracoContext = _umbracoContextAccessor.GetRequiredUmbracoContext(); @@ -60,7 +61,7 @@ public class ContentUrlFactory : IContentUrlFactory return urlInfos .Where(urlInfo => urlInfo.IsUrl) - .Select(urlInfo => new ContentUrlInfo { Culture = urlInfo.Culture, Url = urlInfo.Text }) + .Select(urlInfo => new DocumentUrlInfo { Culture = urlInfo.Culture, Url = urlInfo.Text }) .ToArray(); } } diff --git a/src/Umbraco.Cms.Api.Management/Factories/IContentUrlFactory.cs b/src/Umbraco.Cms.Api.Management/Factories/IContentUrlFactory.cs deleted file mode 100644 index c48cb67052..0000000000 --- a/src/Umbraco.Cms.Api.Management/Factories/IContentUrlFactory.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Umbraco.Cms.Api.Management.ViewModels.Content; -using Umbraco.Cms.Core.Models; - -namespace Umbraco.Cms.Api.Management.Factories; - -public interface IContentUrlFactory -{ - Task> GetUrlsAsync(IContent content); -} diff --git a/src/Umbraco.Cms.Api.Management/Factories/IDocumentUrlFactory.cs b/src/Umbraco.Cms.Api.Management/Factories/IDocumentUrlFactory.cs new file mode 100644 index 0000000000..aa55096117 --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/Factories/IDocumentUrlFactory.cs @@ -0,0 +1,9 @@ +using Umbraco.Cms.Api.Management.ViewModels.Document; +using Umbraco.Cms.Core.Models; + +namespace Umbraco.Cms.Api.Management.Factories; + +public interface IDocumentUrlFactory +{ + Task> GetUrlsAsync(IContent content); +} diff --git a/src/Umbraco.Cms.Api.Management/Factories/MediaPresentationFactory.cs b/src/Umbraco.Cms.Api.Management/Factories/MediaPresentationFactory.cs index 18bc625e51..a195537942 100644 --- a/src/Umbraco.Cms.Api.Management/Factories/MediaPresentationFactory.cs +++ b/src/Umbraco.Cms.Api.Management/Factories/MediaPresentationFactory.cs @@ -45,7 +45,7 @@ internal sealed class MediaPresentationFactory responseModel.Urls = media .GetUrls(_contentSettings, _mediaUrlGenerators) .WhereNotNull() - .Select(mediaUrl => new ContentUrlInfo + .Select(mediaUrl => new MediaUrlInfo { Culture = null, Url = _absoluteUrlBuilder.ToAbsoluteUrl(mediaUrl).ToString(), diff --git a/src/Umbraco.Cms.Api.Management/Factories/PublicAccessPresentationFactory.cs b/src/Umbraco.Cms.Api.Management/Factories/PublicAccessPresentationFactory.cs index 4a826ed62e..b4dd743d8e 100644 --- a/src/Umbraco.Cms.Api.Management/Factories/PublicAccessPresentationFactory.cs +++ b/src/Umbraco.Cms.Api.Management/Factories/PublicAccessPresentationFactory.cs @@ -1,4 +1,5 @@ -using Umbraco.Cms.Api.Management.ViewModels.Member.Item; +using Umbraco.Cms.Api.Management.ViewModels; +using Umbraco.Cms.Api.Management.ViewModels.Member.Item; using Umbraco.Cms.Api.Management.ViewModels.MemberGroup.Item; using Umbraco.Cms.Api.Management.ViewModels.PublicAccess; using Umbraco.Cms.Core; @@ -76,8 +77,8 @@ public class PublicAccessPresentationFactory : IPublicAccessPresentationFactory { Members = members, Groups = memberGroups, - LoginPageId = loginNodeKeyAttempt.Result, - ErrorPageId = noAccessNodeKeyAttempt.Result, + LoginDocument = new ReferenceByIdModel(loginNodeKeyAttempt.Result), + ErrorDocument = new ReferenceByIdModel(noAccessNodeKeyAttempt.Result), }; return Attempt.SucceedWithStatus(PublicAccessOperationStatus.Success, responseModel); @@ -89,7 +90,7 @@ public class PublicAccessPresentationFactory : IPublicAccessPresentationFactory ContentId = contentKey, MemberGroupNames = requestModel.MemberGroupNames, MemberUserNames = requestModel.MemberUserNames, - ErrorPageId = requestModel.ErrorPageId, - LoginPageId = requestModel.LoginPageId, + ErrorPageId = requestModel.ErrorDocument.Id, + LoginPageId = requestModel.LoginDocument.Id, }; } diff --git a/src/Umbraco.Cms.Api.Management/Factories/RedirectUrlPresentationFactory.cs b/src/Umbraco.Cms.Api.Management/Factories/RedirectUrlPresentationFactory.cs index 7afb19e7e7..8a62d299eb 100644 --- a/src/Umbraco.Cms.Api.Management/Factories/RedirectUrlPresentationFactory.cs +++ b/src/Umbraco.Cms.Api.Management/Factories/RedirectUrlPresentationFactory.cs @@ -1,4 +1,5 @@ -using Umbraco.Cms.Api.Management.ViewModels.RedirectUrlManagement; +using Umbraco.Cms.Api.Management.ViewModels; +using Umbraco.Cms.Api.Management.ViewModels.RedirectUrlManagement; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Routing; @@ -25,7 +26,7 @@ public class RedirectUrlPresentationFactory : IRedirectUrlPresentationFactory { OriginalUrl = originalUrl, DestinationUrl = destinationUrl, - ContentId = source.ContentKey, + Document = new ReferenceByIdModel(source.ContentKey), Created = source.CreateDateUtc, Culture = source.Culture, Id = source.Key, diff --git a/src/Umbraco.Cms.Api.Management/Factories/TemplatePresentationFactory.cs b/src/Umbraco.Cms.Api.Management/Factories/TemplatePresentationFactory.cs index 7570774cea..6ba49a9c2f 100644 --- a/src/Umbraco.Cms.Api.Management/Factories/TemplatePresentationFactory.cs +++ b/src/Umbraco.Cms.Api.Management/Factories/TemplatePresentationFactory.cs @@ -1,4 +1,5 @@ -using Umbraco.Cms.Api.Management.ViewModels.Template; +using Umbraco.Cms.Api.Management.ViewModels; +using Umbraco.Cms.Api.Management.ViewModels.Template; using Umbraco.Cms.Core.Mapping; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Services; @@ -31,7 +32,7 @@ public class TemplatePresentationFactory : ITemplatePresentationFactory if (template.MasterTemplateAlias is not null) { ITemplate? parentTemplate = await _templateService.GetAsync(template.MasterTemplateAlias); - responseModel.MasterTemplateId = parentTemplate?.Key; + responseModel.MasterTemplate = ReferenceByIdModel.ReferenceOrNull(parentTemplate?.Key); } return responseModel; diff --git a/src/Umbraco.Cms.Api.Management/Factories/UserGroupPresentationFactory.cs b/src/Umbraco.Cms.Api.Management/Factories/UserGroupPresentationFactory.cs index 7c764bc394..3009be98f3 100644 --- a/src/Umbraco.Cms.Api.Management/Factories/UserGroupPresentationFactory.cs +++ b/src/Umbraco.Cms.Api.Management/Factories/UserGroupPresentationFactory.cs @@ -1,4 +1,5 @@ using Umbraco.Cms.Api.Management.Mapping; +using Umbraco.Cms.Api.Management.ViewModels; using Umbraco.Cms.Api.Management.ViewModels.UserGroup; using Umbraco.Cms.Core; using Umbraco.Cms.Core.Models; @@ -47,9 +48,9 @@ public class UserGroupPresentationFactory : IUserGroupPresentationFactory { Name = userGroup.Name ?? string.Empty, Id = userGroup.Key, - DocumentStartNodeId = contentStartNodeKey, + DocumentStartNode = ReferenceByIdModel.ReferenceOrNull(contentStartNodeKey), DocumentRootAccess = contentRootAccess, - MediaStartNodeId = mediaStartNodeKey, + MediaStartNode = ReferenceByIdModel.ReferenceOrNull(mediaStartNodeKey), MediaRootAccess = mediaRootAccess, Icon = userGroup.Icon, Languages = languageIsoCodesMappingAttempt.Result, @@ -77,8 +78,8 @@ public class UserGroupPresentationFactory : IUserGroupPresentationFactory { Name = userGroup.Name ?? string.Empty, Id = userGroup.Key, - DocumentStartNodeId = contentStartNodeKey, - MediaStartNodeId = mediaStartNodeKey, + DocumentStartNode = ReferenceByIdModel.ReferenceOrNull(contentStartNodeKey), + MediaStartNode = ReferenceByIdModel.ReferenceOrNull(mediaStartNodeKey), Icon = userGroup.Icon, Languages = languageIsoCodesMappingAttempt.Result, HasAccessToAllLanguages = userGroup.HasAccessToAllLanguages, @@ -213,9 +214,9 @@ public class UserGroupPresentationFactory : IUserGroupPresentationFactory private Attempt AssignStartNodesToUserGroup(UserGroupBase source, IUserGroup target) { - if (source.DocumentStartNodeId is not null) + if (source.DocumentStartNode is not null) { - var contentId = GetIdFromKey(source.DocumentStartNodeId.Value, UmbracoObjectTypes.Document); + var contentId = GetIdFromKey(source.DocumentStartNode.Id, UmbracoObjectTypes.Document); if (contentId is null) { @@ -233,9 +234,9 @@ public class UserGroupPresentationFactory : IUserGroupPresentationFactory target.StartContentId = null; } - if (source.MediaStartNodeId is not null) + if (source.MediaStartNode is not null) { - var mediaId = GetIdFromKey(source.MediaStartNodeId.Value, UmbracoObjectTypes.Media); + var mediaId = GetIdFromKey(source.MediaStartNode.Id, UmbracoObjectTypes.Media); if (mediaId is null) { diff --git a/src/Umbraco.Cms.Api.Management/Factories/UserPresentationFactory.cs b/src/Umbraco.Cms.Api.Management/Factories/UserPresentationFactory.cs index dcdbd33ec6..a23eeab7b6 100644 --- a/src/Umbraco.Cms.Api.Management/Factories/UserPresentationFactory.cs +++ b/src/Umbraco.Cms.Api.Management/Factories/UserPresentationFactory.cs @@ -63,7 +63,7 @@ public class UserPresentationFactory : IUserPresentationFactory UpdateDate = user.UpdateDate, State = user.UserState, UserGroupIds = new HashSet(user.Groups.Select(x => x.Key)), - ContentStartNodeIds = GetKeysFromIds(user.StartContentIds, UmbracoObjectTypes.Document), + DocumentStartNodeIds = GetKeysFromIds(user.StartContentIds, UmbracoObjectTypes.Document), MediaStartNodeIds = GetKeysFromIds(user.StartMediaIds, UmbracoObjectTypes.Media), FailedLoginAttempts = user.FailedPasswordAttempts, LastLoginDate = user.LastLoginDate, @@ -105,7 +105,7 @@ public class UserPresentationFactory : IUserPresentationFactory { var inviteModel = new UserResendInviteModel { - InvitedUserKey = requestModel.UserId, + InvitedUserKey = requestModel.User.Id, Message = requestModel.Message, }; @@ -140,7 +140,7 @@ public class UserPresentationFactory : IUserPresentationFactory Name = updateModel.Name, UserName = updateModel.UserName, LanguageIsoCode = updateModel.LanguageIsoCode, - ContentStartNodeKeys = updateModel.ContentStartNodeIds, + ContentStartNodeKeys = updateModel.DocumentStartNodeIds, MediaStartNodeKeys = updateModel.MediaStartNodeIds, }; @@ -170,7 +170,7 @@ public class UserPresentationFactory : IUserPresentationFactory AvatarUrls = presentationUser.AvatarUrls, LanguageIsoCode = presentationUser.LanguageIsoCode, MediaStartNodeIds = mediaStartNodeKeys, - ContentStartNodeIds = documentStartNodeKeys, + DocumentStartNodeIds = documentStartNodeKeys, Permissions = permissions, HasAccessToAllLanguages = hasAccessToAllLanguages }); diff --git a/src/Umbraco.Cms.Api.Management/Mapping/Content/ContentStateHelper.cs b/src/Umbraco.Cms.Api.Management/Mapping/Content/DocumentVariantStateHelper.cs similarity index 57% rename from src/Umbraco.Cms.Api.Management/Mapping/Content/ContentStateHelper.cs rename to src/Umbraco.Cms.Api.Management/Mapping/Content/DocumentVariantStateHelper.cs index f47418fad3..6d7539b825 100644 --- a/src/Umbraco.Cms.Api.Management/Mapping/Content/ContentStateHelper.cs +++ b/src/Umbraco.Cms.Api.Management/Mapping/Content/DocumentVariantStateHelper.cs @@ -1,13 +1,13 @@ -using Umbraco.Cms.Api.Management.ViewModels.Content; +using Umbraco.Cms.Api.Management.ViewModels.Document; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Models.Entities; namespace Umbraco.Cms.Api.Management.Mapping.Content; -internal static class ContentStateHelper +internal static class DocumentVariantStateHelper { - internal static ContentState GetContentState(IContent content, string? culture) - => GetContentState( + internal static DocumentVariantState GetState(IContent content, string? culture) + => GetState( content, culture, content.Edited, @@ -16,8 +16,8 @@ internal static class ContentStateHelper content.EditedCultures ?? Enumerable.Empty(), content.PublishedCultures); - internal static ContentState GetContentState(IDocumentEntitySlim content, string? culture) - => GetContentState( + internal static DocumentVariantState GetState(IDocumentEntitySlim content, string? culture) + => GetState( content, culture, content.Edited, @@ -26,24 +26,24 @@ internal static class ContentStateHelper content.EditedCultures, content.PublishedCultures); - private static ContentState GetContentState(IEntity entity, string? culture, bool edited, bool published, IEnumerable availableCultures, IEnumerable editedCultures, IEnumerable publishedCultures) + private static DocumentVariantState GetState(IEntity entity, string? culture, bool edited, bool published, IEnumerable availableCultures, IEnumerable editedCultures, IEnumerable publishedCultures) { if (entity.Id <= 0 || (culture is not null && availableCultures.Contains(culture) is false)) { - return ContentState.NotCreated; + return DocumentVariantState.NotCreated; } var isDraft = published is false || (culture != null && publishedCultures.Contains(culture) is false); if (isDraft) { - return ContentState.Draft; + return DocumentVariantState.Draft; } var isEdited = culture != null ? editedCultures.Contains(culture) : edited; - return isEdited ? ContentState.PublishedPendingChanges : ContentState.Published; + return isEdited ? DocumentVariantState.PublishedPendingChanges : DocumentVariantState.Published; } } diff --git a/src/Umbraco.Cms.Api.Management/Mapping/DataType/DataTypeViewModelMapDefinition.cs b/src/Umbraco.Cms.Api.Management/Mapping/DataType/DataTypeViewModelMapDefinition.cs index 679f9a1d1d..7f07540ba3 100644 --- a/src/Umbraco.Cms.Api.Management/Mapping/DataType/DataTypeViewModelMapDefinition.cs +++ b/src/Umbraco.Cms.Api.Management/Mapping/DataType/DataTypeViewModelMapDefinition.cs @@ -1,4 +1,5 @@ -using Umbraco.Cms.Api.Management.ViewModels.DataType; +using Umbraco.Cms.Api.Management.ViewModels; +using Umbraco.Cms.Api.Management.ViewModels.DataType; using Umbraco.Cms.Core.Mapping; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.PropertyEditors; @@ -8,27 +9,20 @@ namespace Umbraco.Cms.Api.Management.Mapping.DataType; public class DataTypeViewModelMapDefinition : IMapDefinition { - private readonly PropertyEditorCollection _propertyEditors; private readonly IDataTypeService _dataTypeService; - public DataTypeViewModelMapDefinition( - PropertyEditorCollection propertyEditors, - IDataTypeService dataTypeService) - { - _propertyEditors = propertyEditors; - _dataTypeService = dataTypeService; - } + public DataTypeViewModelMapDefinition(IDataTypeService dataTypeService) + => _dataTypeService = dataTypeService; public void DefineMaps(IUmbracoMapper mapper) - { - mapper.Define((_, _) => new DataTypeResponseModel(), Map); - } + => mapper.Define((_, _) => new DataTypeResponseModel(), Map); // Umbraco.Code.MapAll private void Map(IDataType source, DataTypeResponseModel target, MapperContext context) { target.Id = source.Key; - target.ParentId = _dataTypeService.GetContainer(source.ParentId)?.Key; + Guid? parentId = _dataTypeService.GetContainer(source.ParentId)?.Key; + target.Parent = ReferenceByIdModel.ReferenceOrNull(parentId); target.Name = source.Name ?? string.Empty; target.EditorAlias = source.EditorAlias; target.EditorUiAlias = source.EditorUiAlias; diff --git a/src/Umbraco.Cms.Api.Management/Mapping/Dictionary/DictionaryMapDefinition.cs b/src/Umbraco.Cms.Api.Management/Mapping/Dictionary/DictionaryMapDefinition.cs index a869cd4abb..27922570f0 100644 --- a/src/Umbraco.Cms.Api.Management/Mapping/Dictionary/DictionaryMapDefinition.cs +++ b/src/Umbraco.Cms.Api.Management/Mapping/Dictionary/DictionaryMapDefinition.cs @@ -1,4 +1,5 @@ -using Umbraco.Cms.Core.Mapping; +using Umbraco.Cms.Api.Management.ViewModels; +using Umbraco.Cms.Core.Mapping; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Api.Management.ViewModels.Dictionary; using Umbraco.Extensions; @@ -46,7 +47,7 @@ public class DictionaryMapDefinition : IMapDefinition } target.ItemKey = source.Name; - target.ParentId = source.ParentId; + target.ParentId = source.Parent?.Id; target.DeleteDate = null; } @@ -55,7 +56,7 @@ public class DictionaryMapDefinition : IMapDefinition { target.Id = source.Key; target.Name = source.ItemKey; - target.ParentId = source.ParentId; + target.Parent = ReferenceByIdModel.ReferenceOrNull(source.ParentId); target.TranslatedIsoCodes = source .Translations .Where(translation => translation.Value.IsNullOrWhiteSpace() == false) diff --git a/src/Umbraco.Cms.Api.Management/Mapping/Document/DocumentMapDefinition.cs b/src/Umbraco.Cms.Api.Management/Mapping/Document/DocumentMapDefinition.cs index ad40095102..ca91cfc4e4 100644 --- a/src/Umbraco.Cms.Api.Management/Mapping/Document/DocumentMapDefinition.cs +++ b/src/Umbraco.Cms.Api.Management/Mapping/Document/DocumentMapDefinition.cs @@ -27,7 +27,7 @@ public class DocumentMapDefinition : ContentMapDefinition { - documentVariantViewModel.State = ContentStateHelper.GetContentState(source, culture); + documentVariantViewModel.State = DocumentVariantStateHelper.GetState(source, culture); documentVariantViewModel.PublishDate = culture == null ? source.PublishDate : source.GetPublishDate(culture); diff --git a/src/Umbraco.Cms.Api.Management/Mapping/DocumentType/DocumentTypeMapDefinition.cs b/src/Umbraco.Cms.Api.Management/Mapping/DocumentType/DocumentTypeMapDefinition.cs index 4e4e3f09e9..a41e7a8578 100644 --- a/src/Umbraco.Cms.Api.Management/Mapping/DocumentType/DocumentTypeMapDefinition.cs +++ b/src/Umbraco.Cms.Api.Management/Mapping/DocumentType/DocumentTypeMapDefinition.cs @@ -1,6 +1,5 @@ using Umbraco.Cms.Api.Management.Mapping.ContentType; using Umbraco.Cms.Api.Management.ViewModels; -using Umbraco.Cms.Api.Management.ViewModels.ContentType; using Umbraco.Cms.Api.Management.ViewModels.DocumentType; using Umbraco.Cms.Core.Mapping; using Umbraco.Cms.Core.Models; @@ -46,13 +45,11 @@ public class DocumentTypeMapDefinition : ContentTypeMapDefinition new ReferenceByIdModel(template.Key)); } - target.DefaultTemplate = source.DefaultTemplate is not null - ? new ReferenceByIdModel(source.DefaultTemplate.Key) - : null; + target.DefaultTemplate = ReferenceByIdModel.ReferenceOrNull(source.DefaultTemplate?.Key); if (source.HistoryCleanup != null) { - target.Cleanup = new ContentTypeCleanup + target.Cleanup = new DocumentTypeCleanup { PreventCleanup = source.HistoryCleanup.PreventCleanup, KeepAllVersionsNewerThanDays = source.HistoryCleanup.KeepAllVersionsNewerThanDays, diff --git a/src/Umbraco.Cms.Api.Management/Mapping/DynamicRoot/DynamicRootMapDefinition.cs b/src/Umbraco.Cms.Api.Management/Mapping/DynamicRoot/DynamicRootMapDefinition.cs index 0c987a2045..bd3646fefe 100644 --- a/src/Umbraco.Cms.Api.Management/Mapping/DynamicRoot/DynamicRootMapDefinition.cs +++ b/src/Umbraco.Cms.Api.Management/Mapping/DynamicRoot/DynamicRootMapDefinition.cs @@ -17,9 +17,9 @@ public class DynamicRootMapDefinition : IMapDefinition target.Context = new DynamicRootContext() { CurrentKey = source.Context.Id, - ParentKey = source.Context.ParentId + ParentKey = source.Context.Parent.Id }; - target.OriginKey = source.Query.Origin.Key; + target.OriginKey = source.Query.Origin.Id; target.OriginAlias = source.Query.Origin.Alias; target.QuerySteps = source.Query.Steps.Select(x => new DynamicRootQueryStep() { diff --git a/src/Umbraco.Cms.Api.Management/Mapping/HealthCheck/HealthCheckViewModelsMapDefinition.cs b/src/Umbraco.Cms.Api.Management/Mapping/HealthCheck/HealthCheckViewModelsMapDefinition.cs index c2d13e7a18..810ce80a76 100644 --- a/src/Umbraco.Cms.Api.Management/Mapping/HealthCheck/HealthCheckViewModelsMapDefinition.cs +++ b/src/Umbraco.Cms.Api.Management/Mapping/HealthCheck/HealthCheckViewModelsMapDefinition.cs @@ -1,3 +1,4 @@ +using Umbraco.Cms.Api.Management.ViewModels; using Umbraco.Cms.Api.Management.ViewModels.HealthCheck; using Umbraco.Cms.Core.HealthChecks; using Umbraco.Cms.Core.Mapping; @@ -9,7 +10,7 @@ public class HealthCheckViewModelsMapDefinition : IMapDefinition public void DefineMaps(IUmbracoMapper mapper) { mapper.Define((_, _) => new HealthCheckAction(), Map); - mapper.Define((_, _) => new HealthCheckActionRequestModel { ValueRequired = false }, Map); + mapper.Define((_, _) => new HealthCheckActionRequestModel { ValueRequired = false, HealthCheck = new() }, Map); mapper.Define((_, _) => new HealthCheckResultResponseModel { Message = string.Empty }, Map); mapper.Define((_, _) => new HealthCheckViewModel { Name = string.Empty }, Map); mapper.Define, HealthCheckGroupPresentationModel>( @@ -26,7 +27,7 @@ public class HealthCheckViewModelsMapDefinition : IMapDefinition private static void Map(HealthCheckActionRequestModel source, HealthCheckAction target, MapperContext context) { target.Alias = source.Alias; - target.HealthCheckId = source.HealthCheckId; + target.HealthCheckId = source.HealthCheck.Id; target.Name = source.Name; target.Description = source.Description; target.ValueRequired = source.ValueRequired; @@ -38,11 +39,10 @@ public class HealthCheckViewModelsMapDefinition : IMapDefinition // Umbraco.Code.MapAll private static void Map(HealthCheckAction source, HealthCheckActionRequestModel target, MapperContext context) { - if (source.HealthCheckId is not null) - { - target.HealthCheckId = (Guid)source.HealthCheckId; - } + Guid healthCheckId = source.HealthCheckId + ?? throw new ArgumentException("Cannot map a health check action without a health check", nameof(source)); + target.HealthCheck = new ReferenceByIdModel(healthCheckId); target.Alias = source.Alias; target.Name = source.Name; target.Description = source.Description; diff --git a/src/Umbraco.Cms.Api.Management/Mapping/Users/UsersViewModelsMapDefinition.cs b/src/Umbraco.Cms.Api.Management/Mapping/Users/UsersViewModelsMapDefinition.cs index 69bf8f5ef5..5841473881 100644 --- a/src/Umbraco.Cms.Api.Management/Mapping/Users/UsersViewModelsMapDefinition.cs +++ b/src/Umbraco.Cms.Api.Management/Mapping/Users/UsersViewModelsMapDefinition.cs @@ -1,4 +1,5 @@ -using Umbraco.Cms.Api.Management.ViewModels.User; +using Umbraco.Cms.Api.Management.ViewModels; +using Umbraco.Cms.Api.Management.ViewModels.User; using Umbraco.Cms.Core.Mapping; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Models.Membership; @@ -11,7 +12,7 @@ public class UsersViewModelsMapDefinition : IMapDefinition public void DefineMaps(IUmbracoMapper mapper) { mapper.Define((_, _) => new ChangePasswordUserResponseModel(), Map); - mapper.Define((_, _) => new CreateUserResponseModel(), Map); + mapper.Define((_, _) => new CreateUserResponseModel { User = new() }, Map); mapper.Define((_, _) => new LinkedLoginViewModel { ProviderKey = string.Empty, ProviderName = string.Empty }, Map); } @@ -25,7 +26,10 @@ public class UsersViewModelsMapDefinition : IMapDefinition // Umbraco.Code.MapAll private void Map(UserCreationResult source, CreateUserResponseModel target, MapperContext context) { - target.UserId = source.CreatedUser?.Key ?? Guid.Empty; + Guid userId = source.CreatedUser?.Key + ?? throw new ArgumentException("Cannot map a user creation response without a created user", nameof(source)); + + target.User = new ReferenceByIdModel(userId); target.InitialPassword = source.InitialPassword; } diff --git a/src/Umbraco.Cms.Api.Management/OpenApi.json b/src/Umbraco.Cms.Api.Management/OpenApi.json index dd11ee6edb..ebdeab2377 100644 --- a/src/Umbraco.Cms.Api.Management/OpenApi.json +++ b/src/Umbraco.Cms.Api.Management/OpenApi.json @@ -1407,12 +1407,12 @@ ] } }, - "/umbraco/management/api/v1/data-type/item": { + "/umbraco/management/api/v1/item/data-type": { "get": { "tags": [ "Data Type" ], - "operationId": "GetDataTypeItem", + "operationId": "GetItemDataType", "parameters": [ { "name": "id", @@ -1480,12 +1480,12 @@ ] } }, - "/umbraco/management/api/v1/data-type/item/{alias}": { + "/umbraco/management/api/v1/item/data-type/{alias}": { "get": { "tags": [ "Data Type" ], - "operationId": "GetDataTypeItemByAlias", + "operationId": "GetItemDataTypeByAlias", "parameters": [ { "name": "alias", @@ -2415,12 +2415,12 @@ ] } }, - "/umbraco/management/api/v1/dictionary/item": { + "/umbraco/management/api/v1/item/dictionary": { "get": { "tags": [ "Dictionary" ], - "operationId": "GetDictionaryItem", + "operationId": "GetItemDictionary", "parameters": [ { "name": "id", @@ -2612,12 +2612,12 @@ ] } }, - "/umbraco/management/api/v1/document-blueprint/item": { + "/umbraco/management/api/v1/item/document-blueprint": { "get": { "tags": [ "Document Blueprint" ], - "operationId": "GetDocumentBlueprintItem", + "operationId": "GetItemDocumentBlueprint", "parameters": [ { "name": "id", @@ -4063,12 +4063,12 @@ ] } }, - "/umbraco/management/api/v1/document-type/item": { + "/umbraco/management/api/v1/item/document-type": { "get": { "tags": [ "Document Type" ], - "operationId": "GetDocumentTypeItem", + "operationId": "GetItemDocumentType", "parameters": [ { "name": "id", @@ -6002,79 +6002,6 @@ ] } }, - "/umbraco/management/api/v1/document/item": { - "get": { - "tags": [ - "Document" - ], - "operationId": "GetDocumentItem", - "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/DocumentItemResponseModel" - } - ] - } - } - }, - "text/json": { - "schema": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/DocumentItemResponseModel" - } - ] - } - } - }, - "text/plain": { - "schema": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/DocumentItemResponseModel" - } - ] - } - } - } - } - }, - "401": { - "description": "The resource is protected and requires an authentication token" - } - }, - "security": [ - { - "Backoffice User": [ ] - } - ] - } - }, "/umbraco/management/api/v1/document/sort": { "put": { "tags": [ @@ -6265,6 +6192,79 @@ ] } }, + "/umbraco/management/api/v1/item/document": { + "get": { + "tags": [ + "Document" + ], + "operationId": "GetItemDocument", + "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/DocumentItemResponseModel" + } + ] + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/DocumentItemResponseModel" + } + ] + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/DocumentItemResponseModel" + } + ] + } + } + } + } + }, + "401": { + "description": "The resource is protected and requires an authentication token" + } + }, + "security": [ + { + "Backoffice User": [ ] + } + ] + } + }, "/umbraco/management/api/v1/recycle-bin/document": { "delete": { "tags": [ @@ -7631,6 +7631,78 @@ } } }, + "/umbraco/management/api/v1/item/language": { + "get": { + "tags": [ + "Language" + ], + "operationId": "GetItemLanguage", + "parameters": [ + { + "name": "isoCode", + "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/LanguageItemResponseModel" + } + ] + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/LanguageItemResponseModel" + } + ] + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/LanguageItemResponseModel" + } + ] + } + } + } + } + }, + "401": { + "description": "The resource is protected and requires an authentication token" + } + }, + "security": [ + { + "Backoffice User": [ ] + } + ] + } + }, "/umbraco/management/api/v1/language": { "get": { "tags": [ @@ -8045,78 +8117,6 @@ ] } }, - "/umbraco/management/api/v1/language/item": { - "get": { - "tags": [ - "Language" - ], - "operationId": "GetLanguageItem", - "parameters": [ - { - "name": "isoCode", - "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/LanguageItemResponseModel" - } - ] - } - } - }, - "text/json": { - "schema": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/LanguageItemResponseModel" - } - ] - } - } - }, - "text/plain": { - "schema": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/LanguageItemResponseModel" - } - ] - } - } - } - } - }, - "401": { - "description": "The resource is protected and requires an authentication token" - } - }, - "security": [ - { - "Backoffice User": [ ] - } - ] - } - }, "/umbraco/management/api/v1/log-viewer/level": { "get": { "tags": [ @@ -8788,6 +8788,79 @@ ] } }, + "/umbraco/management/api/v1/item/media-type": { + "get": { + "tags": [ + "Media Type" + ], + "operationId": "GetItemMediaType", + "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/MediaTypeItemResponseModel" + } + ] + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/MediaTypeItemResponseModel" + } + ] + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/MediaTypeItemResponseModel" + } + ] + } + } + } + } + }, + "401": { + "description": "The resource is protected and requires an authentication token" + } + }, + "security": [ + { + "Backoffice User": [ ] + } + ] + } + }, "/umbraco/management/api/v1/media-type": { "post": { "tags": [ @@ -10058,79 +10131,6 @@ ] } }, - "/umbraco/management/api/v1/media-type/item": { - "get": { - "tags": [ - "Media Type" - ], - "operationId": "GetMediaTypeItem", - "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/MediaTypeItemResponseModel" - } - ] - } - } - }, - "text/json": { - "schema": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/MediaTypeItemResponseModel" - } - ] - } - } - }, - "text/plain": { - "schema": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/MediaTypeItemResponseModel" - } - ] - } - } - } - } - }, - "401": { - "description": "The resource is protected and requires an authentication token" - } - }, - "security": [ - { - "Backoffice User": [ ] - } - ] - } - }, "/umbraco/management/api/v1/tree/media-type/children": { "get": { "tags": [ @@ -10271,6 +10271,79 @@ ] } }, + "/umbraco/management/api/v1/item/media": { + "get": { + "tags": [ + "Media" + ], + "operationId": "GetItemMedia", + "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/MediaItemResponseModel" + } + ] + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/MediaItemResponseModel" + } + ] + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/MediaItemResponseModel" + } + ] + } + } + } + } + }, + "401": { + "description": "The resource is protected and requires an authentication token" + } + }, + "security": [ + { + "Backoffice User": [ ] + } + ] + } + }, "/umbraco/management/api/v1/media": { "post": { "tags": [ @@ -10888,79 +10961,6 @@ ] } }, - "/umbraco/management/api/v1/media/item": { - "get": { - "tags": [ - "Media" - ], - "operationId": "GetMediaItem", - "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/MediaItemResponseModel" - } - ] - } - } - }, - "text/json": { - "schema": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/MediaItemResponseModel" - } - ] - } - } - }, - "text/plain": { - "schema": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/MediaItemResponseModel" - } - ] - } - } - } - } - }, - "401": { - "description": "The resource is protected and requires an authentication token" - } - }, - "security": [ - { - "Backoffice User": [ ] - } - ] - } - }, "/umbraco/management/api/v1/media/sort": { "put": { "tags": [ @@ -11459,12 +11459,12 @@ ] } }, - "/umbraco/management/api/v1/member-group/item": { + "/umbraco/management/api/v1/item/member-group": { "get": { "tags": [ "Member Group" ], - "operationId": "GetMemberGroupItem", + "operationId": "GetItemMemberGroup", "parameters": [ { "name": "id", @@ -11590,6 +11590,79 @@ ] } }, + "/umbraco/management/api/v1/item/member-type": { + "get": { + "tags": [ + "Member Type" + ], + "operationId": "GetItemMemberType", + "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/MemberTypeItemResponseModel" + } + ] + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/MemberTypeItemResponseModel" + } + ] + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/MemberTypeItemResponseModel" + } + ] + } + } + } + } + }, + "401": { + "description": "The resource is protected and requires an authentication token" + } + }, + "security": [ + { + "Backoffice User": [ ] + } + ] + } + }, "/umbraco/management/api/v1/member-type": { "post": { "tags": [ @@ -12220,79 +12293,6 @@ ] } }, - "/umbraco/management/api/v1/member-type/item": { - "get": { - "tags": [ - "Member Type" - ], - "operationId": "GetMemberTypeItem", - "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/MemberTypeItemResponseModel" - } - ] - } - } - }, - "text/json": { - "schema": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/MemberTypeItemResponseModel" - } - ] - } - } - }, - "text/plain": { - "schema": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/MemberTypeItemResponseModel" - } - ] - } - } - } - } - }, - "401": { - "description": "The resource is protected and requires an authentication token" - } - }, - "security": [ - { - "Backoffice User": [ ] - } - ] - } - }, "/umbraco/management/api/v1/tree/member-type/root": { "get": { "tags": [ @@ -12351,6 +12351,79 @@ ] } }, + "/umbraco/management/api/v1/item/member": { + "get": { + "tags": [ + "Member" + ], + "operationId": "GetItemMember", + "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" + } + ] + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/MemberItemResponseModel" + } + ] + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/MemberItemResponseModel" + } + ] + } + } + } + } + }, + "401": { + "description": "The resource is protected and requires an authentication token" + } + }, + "security": [ + { + "Backoffice User": [ ] + } + ] + } + }, "/umbraco/management/api/v1/member": { "post": { "tags": [ @@ -12815,79 +12888,6 @@ ] } }, - "/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" - } - ] - } - } - }, - "text/json": { - "schema": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/MemberItemResponseModel" - } - ] - } - } - }, - "text/plain": { - "schema": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/MemberItemResponseModel" - } - ] - } - } - } - } - }, - "401": { - "description": "The resource is protected and requires an authentication token" - } - }, - "security": [ - { - "Backoffice User": [ ] - } - ] - } - }, "/umbraco/management/api/v1/member/validate": { "post": { "tags": [ @@ -13866,6 +13866,78 @@ ] } }, + "/umbraco/management/api/v1/item/partial-view": { + "get": { + "tags": [ + "Partial View" + ], + "operationId": "GetItemPartialView", + "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/PartialViewItemResponseModel" + } + ] + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/PartialViewItemResponseModel" + } + ] + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/PartialViewItemResponseModel" + } + ] + } + } + } + } + }, + "401": { + "description": "The resource is protected and requires an authentication token" + } + }, + "security": [ + { + "Backoffice User": [ ] + } + ] + } + }, "/umbraco/management/api/v1/partial-view": { "post": { "tags": [ @@ -14601,78 +14673,6 @@ ] } }, - "/umbraco/management/api/v1/partial-view/item": { - "get": { - "tags": [ - "Partial View" - ], - "operationId": "GetPartialViewItem", - "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/PartialViewItemResponseModel" - } - ] - } - } - }, - "text/json": { - "schema": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/PartialViewItemResponseModel" - } - ] - } - } - }, - "text/plain": { - "schema": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/PartialViewItemResponseModel" - } - ] - } - } - } - } - }, - "401": { - "description": "The resource is protected and requires an authentication token" - } - }, - "security": [ - { - "Backoffice User": [ ] - } - ] - } - }, "/umbraco/management/api/v1/partial-view/snippet": { "get": { "tags": [ @@ -15510,6 +15510,79 @@ ] } }, + "/umbraco/management/api/v1/item/relation-type": { + "get": { + "tags": [ + "Relation Type" + ], + "operationId": "GetItemRelationType", + "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/RelationTypeItemResponseModel" + } + ] + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/RelationTypeItemResponseModel" + } + ] + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/RelationTypeItemResponseModel" + } + ] + } + } + } + } + }, + "401": { + "description": "The resource is protected and requires an authentication token" + } + }, + "security": [ + { + "Backoffice User": [ ] + } + ] + } + }, "/umbraco/management/api/v1/relation-type": { "post": { "tags": [ @@ -15860,79 +15933,6 @@ ] } }, - "/umbraco/management/api/v1/relation-type/item": { - "get": { - "tags": [ - "Relation Type" - ], - "operationId": "GetRelationTypeItem", - "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/RelationTypeItemResponseModel" - } - ] - } - } - }, - "text/json": { - "schema": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/RelationTypeItemResponseModel" - } - ] - } - } - }, - "text/plain": { - "schema": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/RelationTypeItemResponseModel" - } - ] - } - } - } - } - }, - "401": { - "description": "The resource is protected and requires an authentication token" - } - }, - "security": [ - { - "Backoffice User": [ ] - } - ] - } - }, "/umbraco/management/api/v1/tree/relation-type/root": { "get": { "tags": [ @@ -16153,6 +16153,78 @@ ] } }, + "/umbraco/management/api/v1/item/script": { + "get": { + "tags": [ + "Script" + ], + "operationId": "GetItemScript", + "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/ScriptItemResponseModel" + } + ] + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/ScriptItemResponseModel" + } + ] + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/ScriptItemResponseModel" + } + ] + } + } + } + } + }, + "401": { + "description": "The resource is protected and requires an authentication token" + } + }, + "security": [ + { + "Backoffice User": [ ] + } + ] + } + }, "/umbraco/management/api/v1/script": { "post": { "tags": [ @@ -16888,78 +16960,6 @@ ] } }, - "/umbraco/management/api/v1/script/item": { - "get": { - "tags": [ - "Script" - ], - "operationId": "GetScriptItem", - "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/ScriptItemResponseModel" - } - ] - } - } - }, - "text/json": { - "schema": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/ScriptItemResponseModel" - } - ] - } - } - }, - "text/plain": { - "schema": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/ScriptItemResponseModel" - } - ] - } - } - } - } - }, - "401": { - "description": "The resource is protected and requires an authentication token" - } - }, - "security": [ - { - "Backoffice User": [ ] - } - ] - } - }, "/umbraco/management/api/v1/tree/script/children": { "get": { "tags": [ @@ -17801,12 +17801,12 @@ ] } }, - "/umbraco/management/api/v1/static-file/item": { + "/umbraco/management/api/v1/item/static-file": { "get": { "tags": [ "Static File" ], - "operationId": "GetStaticFileItem", + "operationId": "GetItemStaticFile", "parameters": [ { "name": "path", @@ -17996,6 +17996,78 @@ ] } }, + "/umbraco/management/api/v1/item/stylesheet": { + "get": { + "tags": [ + "Stylesheet" + ], + "operationId": "GetItemStylesheet", + "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/StylesheetItemResponseModel" + } + ] + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/StylesheetItemResponseModel" + } + ] + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/StylesheetItemResponseModel" + } + ] + } + } + } + } + }, + "401": { + "description": "The resource is protected and requires an authentication token" + } + }, + "security": [ + { + "Backoffice User": [ ] + } + ] + } + }, "/umbraco/management/api/v1/stylesheet": { "post": { "tags": [ @@ -18731,78 +18803,6 @@ ] } }, - "/umbraco/management/api/v1/stylesheet/item": { - "get": { - "tags": [ - "Stylesheet" - ], - "operationId": "GetStylesheetItem", - "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/StylesheetItemResponseModel" - } - ] - } - } - }, - "text/json": { - "schema": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/StylesheetItemResponseModel" - } - ] - } - } - }, - "text/plain": { - "schema": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/StylesheetItemResponseModel" - } - ] - } - } - } - } - }, - "401": { - "description": "The resource is protected and requires an authentication token" - } - }, - "security": [ - { - "Backoffice User": [ ] - } - ] - } - }, "/umbraco/management/api/v1/tree/stylesheet/children": { "get": { "tags": [ @@ -19183,6 +19183,79 @@ ] } }, + "/umbraco/management/api/v1/item/template": { + "get": { + "tags": [ + "Template" + ], + "operationId": "GetItemTemplate", + "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/TemplateItemResponseModel" + } + ] + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/TemplateItemResponseModel" + } + ] + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/TemplateItemResponseModel" + } + ] + } + } + } + } + }, + "401": { + "description": "The resource is protected and requires an authentication token" + } + }, + "security": [ + { + "Backoffice User": [ ] + } + ] + } + }, "/umbraco/management/api/v1/template": { "post": { "tags": [ @@ -19594,79 +19667,6 @@ ] } }, - "/umbraco/management/api/v1/template/item": { - "get": { - "tags": [ - "Template" - ], - "operationId": "GetTemplateItem", - "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/TemplateItemResponseModel" - } - ] - } - } - }, - "text/json": { - "schema": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/TemplateItemResponseModel" - } - ] - } - } - }, - "text/plain": { - "schema": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/TemplateItemResponseModel" - } - ] - } - } - } - } - }, - "401": { - "description": "The resource is protected and requires an authentication token" - } - }, - "security": [ - { - "Backoffice User": [ ] - } - ] - } - }, "/umbraco/management/api/v1/template/query/execute": { "post": { "tags": [ @@ -20738,6 +20738,79 @@ ] } }, + "/umbraco/management/api/v1/item/user-group": { + "get": { + "tags": [ + "User Group" + ], + "operationId": "GetItemUserGroup", + "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" + } + ] + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/UserGroupItemResponseModel" + } + ] + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/UserGroupItemResponseModel" + } + ] + } + } + } + } + }, + "401": { + "description": "The resource is protected and requires an authentication token" + } + }, + "security": [ + { + "Backoffice User": [ ] + } + ] + } + }, "/umbraco/management/api/v1/user-group": { "delete": { "tags": [ @@ -21344,12 +21417,12 @@ ] } }, - "/umbraco/management/api/v1/user-group/item": { + "/umbraco/management/api/v1/item/user": { "get": { "tags": [ - "User Group" + "User" ], - "operationId": "GetUserGroupItem", + "operationId": "GetItemUser", "parameters": [ { "name": "id", @@ -21374,7 +21447,7 @@ "items": { "oneOf": [ { - "$ref": "#/components/schemas/UserGroupItemResponseModel" + "$ref": "#/components/schemas/UserItemResponseModel" } ] } @@ -21386,7 +21459,7 @@ "items": { "oneOf": [ { - "$ref": "#/components/schemas/UserGroupItemResponseModel" + "$ref": "#/components/schemas/UserItemResponseModel" } ] } @@ -21398,7 +21471,7 @@ "items": { "oneOf": [ { - "$ref": "#/components/schemas/UserGroupItemResponseModel" + "$ref": "#/components/schemas/UserItemResponseModel" } ] } @@ -23615,79 +23688,6 @@ ] } }, - "/umbraco/management/api/v1/user/item": { - "get": { - "tags": [ - "User" - ], - "operationId": "GetUserItem", - "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" - } - ] - } - } - }, - "text/json": { - "schema": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/UserItemResponseModel" - } - ] - } - } - }, - "text/plain": { - "schema": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/UserItemResponseModel" - } - ] - } - } - } - } - }, - "401": { - "description": "The resource is protected and requires an authentication token" - } - }, - "security": [ - { - "Backoffice User": [ ] - } - ] - } - }, "/umbraco/management/api/v1/user/set-user-groups": { "post": { "tags": [ @@ -23868,17 +23868,23 @@ "required": [ "logType", "timestamp", - "userId" + "user" ], "type": "object", "properties": { - "userId": { - "type": "string", - "format": "uuid" + "user": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ] }, - "entityId": { - "type": "string", - "format": "uuid", + "entity": { + "oneOf": [ + { + "$ref": "#/components/schemas/AuditLogEntityModel" + } + ], "nullable": true }, "timestamp": { @@ -23888,10 +23894,6 @@ "logType": { "$ref": "#/components/schemas/AuditTypeModel" }, - "entityType": { - "type": "string", - "nullable": true - }, "comment": { "type": "string", "nullable": true @@ -23903,6 +23905,21 @@ }, "additionalProperties": false }, + "AuditLogEntityModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "type": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, "AuditLogResponseModel": { "type": "object", "allOf": [ @@ -24169,28 +24186,30 @@ }, "additionalProperties": false }, - "ContentStateModel": { - "enum": [ - "NotCreated", - "Draft", - "Published", - "PublishedPendingChanges" - ], - "type": "string" - }, "ContentTreeItemResponseModel": { "required": [ + "hasChildren", "id", "isTrashed", - "noAccess" + "noAccess", + "type" ], "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/EntityTreeItemResponseModel" - } - ], "properties": { + "type": { + "type": "string" + }, + "hasChildren": { + "type": "boolean" + }, + "parent": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ], + "nullable": true + }, "noAccess": { "type": "boolean" }, @@ -24204,7 +24223,7 @@ }, "additionalProperties": false }, - "ContentTypeCleanupModel": { + "ContentTypeCleanupBaseModel": { "required": [ "preventCleanup" ], @@ -24506,7 +24525,7 @@ }, "additionalProperties": false }, - "ContentUrlInfoModel": { + "ContentUrlInfoBaseModel": { "required": [ "url" ], @@ -24525,9 +24544,12 @@ "CopyDataTypeRequestModel": { "type": "object", "properties": { - "targetId": { - "type": "string", - "format": "uuid", + "target": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ], "nullable": true } }, @@ -24945,9 +24967,12 @@ "format": "uuid", "nullable": true }, - "parentId": { - "type": "string", - "format": "uuid", + "parent": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ], "nullable": true } }, @@ -24966,9 +24991,12 @@ "format": "uuid", "nullable": true }, - "parentId": { - "type": "string", - "format": "uuid", + "parent": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ], "nullable": true } }, @@ -25056,7 +25084,7 @@ "cleanup": { "oneOf": [ { - "$ref": "#/components/schemas/ContentTypeCleanupModel" + "$ref": "#/components/schemas/DocumentTypeCleanupModel" } ] }, @@ -25096,9 +25124,12 @@ "format": "uuid", "nullable": true }, - "parentId": { - "type": "string", - "format": "uuid", + "parent": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ], "nullable": true } }, @@ -25386,7 +25417,7 @@ } ], "properties": { - "key": { + "id": { "type": "string", "format": "uuid", "nullable": true @@ -25414,13 +25445,16 @@ }, "CreateUserResponseModel": { "required": [ - "userId" + "user" ], "type": "object", "properties": { - "userId": { - "type": "string", - "format": "uuid" + "user": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ] }, "initialPassword": { "type": "string", @@ -25474,7 +25508,7 @@ "CurrentUserResponseModel": { "required": [ "avatarUrls", - "contentStartNodeIds", + "documentStartNodeIds", "email", "hasAccessToAllLanguages", "id", @@ -25503,7 +25537,7 @@ "type": "string", "nullable": true }, - "contentStartNodeIds": { + "documentStartNodeIds": { "uniqueItems": true, "type": "array", "items": { @@ -25674,9 +25708,12 @@ "type": "string", "format": "uuid" }, - "parentId": { - "type": "string", - "format": "uuid", + "parent": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ], "nullable": true } }, @@ -25940,9 +25977,12 @@ "type": "string", "format": "uuid" }, - "parentId": { - "type": "string", - "format": "uuid", + "parent": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ], "nullable": true }, "translatedIsoCodes": { @@ -25989,8 +26029,7 @@ }, "DocumentBlueprintTreeItemResponseModel": { "required": [ - "documentTypeAlias", - "documentTypeId" + "documentType" ], "type": "object", "allOf": [ @@ -25999,16 +26038,12 @@ } ], "properties": { - "documentTypeId": { - "type": "string", - "format": "uuid" - }, - "documentTypeAlias": { - "type": "string" - }, - "documentTypeName": { - "type": "string", - "nullable": true + "documentType": { + "oneOf": [ + { + "$ref": "#/components/schemas/DocumentTypeReferenceResponseModel" + } + ] } }, "additionalProperties": false @@ -26143,7 +26178,7 @@ "items": { "oneOf": [ { - "$ref": "#/components/schemas/ContentUrlInfoModel" + "$ref": "#/components/schemas/DocumentUrlInfoModel" } ] } @@ -26205,6 +26240,15 @@ }, "additionalProperties": false }, + "DocumentTypeCleanupModel": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/ContentTypeCleanupBaseModel" + } + ], + "additionalProperties": false + }, "DocumentTypeCompositionModel": { "required": [ "compositionType", @@ -26350,7 +26394,7 @@ "cleanup": { "oneOf": [ { - "$ref": "#/components/schemas/ContentTypeCleanupModel" + "$ref": "#/components/schemas/DocumentTypeCleanupModel" } ] }, @@ -26419,6 +26463,15 @@ }, "additionalProperties": false }, + "DocumentUrlInfoModel": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/ContentUrlInfoBaseModel" + } + ], + "additionalProperties": false + }, "DocumentValueModel": { "type": "object", "allOf": [ @@ -26440,7 +26493,7 @@ ], "properties": { "state": { - "$ref": "#/components/schemas/ContentStateModel" + "$ref": "#/components/schemas/DocumentVariantStateModel" } }, "additionalProperties": false @@ -26466,7 +26519,7 @@ ], "properties": { "state": { - "$ref": "#/components/schemas/ContentStateModel" + "$ref": "#/components/schemas/DocumentVariantStateModel" }, "publishDate": { "type": "string", @@ -26476,6 +26529,15 @@ }, "additionalProperties": false }, + "DocumentVariantStateModel": { + "enum": [ + "NotCreated", + "Draft", + "Published", + "PublishedPendingChanges" + ], + "type": "string" + }, "DomainPresentationModel": { "required": [ "domainName", @@ -26526,7 +26588,7 @@ }, "DynamicRootContextRequestModel": { "required": [ - "parentId" + "parent" ], "type": "object", "properties": { @@ -26535,9 +26597,12 @@ "format": "uuid", "nullable": true }, - "parentId": { - "type": "string", - "format": "uuid" + "parent": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ] }, "culture": { "type": "string", @@ -26559,7 +26624,7 @@ "alias": { "type": "string" }, - "key": { + "id": { "type": "string", "format": "uuid", "nullable": true @@ -26962,9 +27027,12 @@ "type": "string", "format": "uuid" }, - "parentId": { - "type": "string", - "format": "uuid", + "parent": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ], "nullable": true } }, @@ -26989,14 +27057,17 @@ }, "HealthCheckActionRequestModel": { "required": [ - "healthCheckId", + "healthCheck", "valueRequired" ], "type": "object", "properties": { - "healthCheckId": { - "type": "string", - "format": "uuid" + "healthCheck": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ] }, "alias": { "type": "string", @@ -27211,17 +27282,23 @@ }, "ImportDictionaryRequestModel": { "required": [ - "temporaryFileId" + "temporaryFile" ], "type": "object", "properties": { - "temporaryFileId": { - "type": "string", - "format": "uuid" + "temporaryFile": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ] }, - "parentId": { - "type": "string", - "format": "uuid", + "parent": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ], "nullable": true } }, @@ -27719,7 +27796,7 @@ "items": { "oneOf": [ { - "$ref": "#/components/schemas/ContentUrlInfoModel" + "$ref": "#/components/schemas/MediaUrlInfoModel" } ] } @@ -27922,6 +27999,15 @@ }, "additionalProperties": false }, + "MediaUrlInfoModel": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/ContentUrlInfoBaseModel" + } + ], + "additionalProperties": false + }, "MediaValueModel": { "type": "object", "allOf": [ @@ -28237,9 +28323,12 @@ "MoveDataTypeRequestModel": { "type": "object", "properties": { - "targetId": { - "type": "string", - "format": "uuid", + "target": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ], "nullable": true } }, @@ -28248,9 +28337,12 @@ "MoveDictionaryRequestModel": { "type": "object", "properties": { - "targetId": { - "type": "string", - "format": "uuid", + "target": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ], "nullable": true } }, @@ -29795,18 +29887,24 @@ }, "PublicAccessBaseModel": { "required": [ - "errorPageId", - "loginPageId" + "errorDocument", + "loginDocument" ], "type": "object", "properties": { - "loginPageId": { - "type": "string", - "format": "uuid" + "loginDocument": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ] }, - "errorPageId": { - "type": "string", - "format": "uuid" + "errorDocument": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ] } }, "additionalProperties": false @@ -29944,9 +30042,9 @@ }, "RedirectUrlResponseModel": { "required": [ - "contentId", "created", "destinationUrl", + "document", "id", "originalUrl" ], @@ -29966,9 +30064,12 @@ "type": "string", "format": "date-time" }, - "contentId": { - "type": "string", - "format": "uuid" + "document": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ] }, "culture": { "type": "string", @@ -30198,13 +30299,16 @@ }, "ResendInviteUserRequestModel": { "required": [ - "userId" + "user" ], "type": "object", "properties": { - "userId": { - "type": "string", - "format": "uuid" + "user": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ] }, "message": { "type": "string", @@ -30482,13 +30586,16 @@ }, "SetAvatarRequestModel": { "required": [ - "fileId" + "file" ], "type": "object", "properties": { - "fileId": { - "type": "string", - "format": "uuid" + "file": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ] } }, "additionalProperties": false @@ -30508,9 +30615,12 @@ ], "type": "object", "properties": { - "parentId": { - "type": "string", - "format": "uuid", + "parent": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ], "nullable": true }, "sorting": { @@ -30714,12 +30824,15 @@ ], "type": "object", "properties": { - "rootContentId": { - "type": "string", - "format": "uuid", + "rootDocument": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ], "nullable": true }, - "contentTypeAlias": { + "documentTypeAlias": { "type": "string", "nullable": true }, @@ -30859,13 +30972,13 @@ }, "TemplateQuerySettingsResponseModel": { "required": [ - "contentTypeAliases", + "documentTypeAliases", "operators", "properties" ], "type": "object", "properties": { - "contentTypeAliases": { + "documentTypeAliases": { "type": "array", "items": { "type": "string" @@ -30909,9 +31022,12 @@ "type": "string", "format": "uuid" }, - "masterTemplateId": { - "type": "string", - "format": "uuid", + "masterTemplate": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ], "nullable": true } }, @@ -31406,7 +31522,7 @@ "cleanup": { "oneOf": [ { - "$ref": "#/components/schemas/ContentTypeCleanupModel" + "$ref": "#/components/schemas/DocumentTypeCleanupModel" } ] }, @@ -31711,7 +31827,7 @@ }, "UpdateUserRequestModel": { "required": [ - "contentStartNodeIds", + "documentStartNodeIds", "languageIsoCode", "mediaStartNodeIds" ], @@ -31725,7 +31841,7 @@ "languageIsoCode": { "type": "string" }, - "contentStartNodeIds": { + "documentStartNodeIds": { "uniqueItems": true, "type": "array", "items": { @@ -31831,17 +31947,23 @@ "hasAccessToAllLanguages": { "type": "boolean" }, - "documentStartNodeId": { - "type": "string", - "format": "uuid", + "documentStartNode": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ], "nullable": true }, "documentRootAccess": { "type": "boolean" }, - "mediaStartNodeId": { - "type": "string", - "format": "uuid", + "mediaStartNode": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ], "nullable": true }, "mediaRootAccess": { @@ -32019,8 +32141,8 @@ "UserResponseModel": { "required": [ "avatarUrls", - "contentStartNodeIds", "createDate", + "documentStartNodeIds", "failedLoginAttempts", "id", "mediaStartNodeIds", @@ -32042,7 +32164,7 @@ "type": "string", "nullable": true }, - "contentStartNodeIds": { + "documentStartNodeIds": { "uniqueItems": true, "type": "array", "items": { @@ -32279,13 +32401,16 @@ "VerifyInviteUserRequestModel": { "required": [ "token", - "userId" + "user" ], "type": "object", "properties": { - "userId": { - "type": "string", - "format": "uuid" + "user": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ] }, "token": { "minLength": 1, @@ -32297,16 +32422,18 @@ "VerifyResetPasswordTokenRequestModel": { "required": [ "resetCode", - "userId" + "user" ], "type": "object", "properties": { - "userId": { - "type": "string", - "format": "uuid" + "user": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ] }, "resetCode": { - "minLength": 1, "type": "string" } }, diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/AuditLogs/AuditLogBaseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/AuditLogs/AuditLogBaseModel.cs index 0c21f3f95f..67d9c6c92b 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/AuditLogs/AuditLogBaseModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/AuditLogs/AuditLogBaseModel.cs @@ -1,20 +1,17 @@ -using System.ComponentModel.DataAnnotations; -using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Models; namespace Umbraco.Cms.Api.Management.ViewModels.AuditLogs; public class AuditLogBaseModel { - public Guid UserId { get; set; } + public ReferenceByIdModel User { get; set; } = new(); - public Guid? EntityId { get; set; } + public AuditLogEntity? Entity { get; set; } public DateTime Timestamp { get; set; } public AuditType LogType { get; set; } - public string? EntityType { get; set; } - public string? Comment { get; set; } public string? Parameters { get; set; } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/AuditLogs/AuditLogEntity.cs b/src/Umbraco.Cms.Api.Management/ViewModels/AuditLogs/AuditLogEntity.cs new file mode 100644 index 0000000000..0d010dd0bd --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/ViewModels/AuditLogs/AuditLogEntity.cs @@ -0,0 +1,8 @@ +namespace Umbraco.Cms.Api.Management.ViewModels.AuditLogs; + +public class AuditLogEntity +{ + public Guid? Id { get; set; } + + public string? Type { get; set; } +} diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Content/ContentUrlInfo.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Content/ContentUrlInfoBase.cs similarity index 79% rename from src/Umbraco.Cms.Api.Management/ViewModels/Content/ContentUrlInfo.cs rename to src/Umbraco.Cms.Api.Management/ViewModels/Content/ContentUrlInfoBase.cs index 87c233f593..8ef23b0d2f 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/Content/ContentUrlInfo.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Content/ContentUrlInfoBase.cs @@ -1,6 +1,6 @@ namespace Umbraco.Cms.Api.Management.ViewModels.Content; -public class ContentUrlInfo +public abstract class ContentUrlInfoBase { public required string? Culture { get; init; } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Content/DocumentVariantItemResponseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Content/DocumentVariantItemResponseModel.cs deleted file mode 100644 index 9023d13f60..0000000000 --- a/src/Umbraco.Cms.Api.Management/ViewModels/Content/DocumentVariantItemResponseModel.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Umbraco.Cms.Api.Management.ViewModels.Content; - -public class DocumentVariantItemResponseModel : VariantItemResponseModelBase -{ - public required ContentState State { get; set; } -} diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Content/IHasCultureAndSegment.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Content/IHasCultureAndSegment.cs index 9f2e89197f..8499f01963 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/Content/IHasCultureAndSegment.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Content/IHasCultureAndSegment.cs @@ -1,6 +1,6 @@ namespace Umbraco.Cms.Api.Management.ViewModels.Content; -public interface IHasCultureAndSegment +internal interface IHasCultureAndSegment { public string? Culture { get; } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/ContentType/AllowedDocumentTypeChild.cs b/src/Umbraco.Cms.Api.Management/ViewModels/ContentType/AllowedContentType.cs similarity index 100% rename from src/Umbraco.Cms.Api.Management/ViewModels/ContentType/AllowedDocumentTypeChild.cs rename to src/Umbraco.Cms.Api.Management/ViewModels/ContentType/AllowedContentType.cs diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/ContentType/ContentTypeCleanup.cs b/src/Umbraco.Cms.Api.Management/ViewModels/ContentType/ContentTypeCleanup.cs index 072e2637c6..b4121467fb 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/ContentType/ContentTypeCleanup.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/ContentType/ContentTypeCleanup.cs @@ -1,6 +1,6 @@ namespace Umbraco.Cms.Api.Management.ViewModels.ContentType; -public class ContentTypeCleanup +public abstract class ContentTypeCleanupBase { public bool PreventCleanup { get; init; } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/DataType/CopyDataTypeRequestModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/DataType/CopyDataTypeRequestModel.cs index b385f22910..993811065a 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/DataType/CopyDataTypeRequestModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/DataType/CopyDataTypeRequestModel.cs @@ -2,5 +2,5 @@ namespace Umbraco.Cms.Api.Management.ViewModels.DataType; public class CopyDataTypeRequestModel { - public Guid? TargetId { get; set; } + public ReferenceByIdModel? Target { get; set; } } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/DataType/CreateDataTypeRequestModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/DataType/CreateDataTypeRequestModel.cs index 7bf6bd2be4..532dadaae9 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/DataType/CreateDataTypeRequestModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/DataType/CreateDataTypeRequestModel.cs @@ -3,5 +3,6 @@ public class CreateDataTypeRequestModel : DataTypeModelBase { public Guid? Id { get; set; } - public Guid? ParentId { get; set; } + + public ReferenceByIdModel? Parent { get; set; } } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/DataType/DataTypeResponseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/DataType/DataTypeResponseModel.cs index 14b5cc4e60..8c7a9a6c6a 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/DataType/DataTypeResponseModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/DataType/DataTypeResponseModel.cs @@ -4,5 +4,5 @@ public class DataTypeResponseModel : DataTypeModelBase { public Guid Id { get; set; } - public Guid? ParentId { get; set; } + public ReferenceByIdModel? Parent { get; set; } } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/DataType/MoveDataTypeRequestModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/DataType/MoveDataTypeRequestModel.cs index 4a68d0c87b..25609f3438 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/DataType/MoveDataTypeRequestModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/DataType/MoveDataTypeRequestModel.cs @@ -2,5 +2,5 @@ namespace Umbraco.Cms.Api.Management.ViewModels.DataType; public class MoveDataTypeRequestModel { - public Guid? TargetId { get; set; } + public ReferenceByIdModel? Target { get; set; } } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Dictionary/CreateDictionaryItemRequestModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Dictionary/CreateDictionaryItemRequestModel.cs index c0b4f19a78..cb5b1f8a8a 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/Dictionary/CreateDictionaryItemRequestModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Dictionary/CreateDictionaryItemRequestModel.cs @@ -3,5 +3,6 @@ public class CreateDictionaryItemRequestModel : DictionaryItemModelBase { public Guid? Id { get; set; } - public Guid? ParentId { get; set; } + + public ReferenceByIdModel? Parent { get; set; } } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Dictionary/DictionaryOverviewResponseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Dictionary/DictionaryOverviewResponseModel.cs index 6149aeb75d..5dfa92b059 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/Dictionary/DictionaryOverviewResponseModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Dictionary/DictionaryOverviewResponseModel.cs @@ -13,9 +13,9 @@ public class DictionaryOverviewResponseModel public Guid Id { get; set; } /// - /// Gets or sets the parent key. + /// Gets or sets the parent. /// - public Guid? ParentId { get; set; } + public ReferenceByIdModel? Parent { get; set; } /// /// Sets the translations. diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Dictionary/ImportDictionaryItemsPresentationModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Dictionary/ImportDictionaryItemsPresentationModel.cs index 3dd3fa81cf..86486a87c7 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/Dictionary/ImportDictionaryItemsPresentationModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Dictionary/ImportDictionaryItemsPresentationModel.cs @@ -6,5 +6,5 @@ public class ImportDictionaryItemsPresentationModel public string? Name { get; set; } - public Guid? ParentId { get; set; } + public ReferenceByIdModel? Parent { get; set; } } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Dictionary/ImportDictionaryRequestModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Dictionary/ImportDictionaryRequestModel.cs index f2357ff73c..293db7cfdb 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/Dictionary/ImportDictionaryRequestModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Dictionary/ImportDictionaryRequestModel.cs @@ -2,7 +2,7 @@ public class ImportDictionaryRequestModel { - public required Guid TemporaryFileId { get; set; } + public required ReferenceByIdModel TemporaryFile { get; set; } - public Guid? ParentId { get; set; } + public ReferenceByIdModel? Parent { get; set; } } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Dictionary/MoveDictionaryRequestModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Dictionary/MoveDictionaryRequestModel.cs index 099516eee7..f34c7ff504 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/Dictionary/MoveDictionaryRequestModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Dictionary/MoveDictionaryRequestModel.cs @@ -2,5 +2,5 @@ public class MoveDictionaryRequestModel { - public Guid? TargetId { get; set; } + public ReferenceByIdModel? Target { get; set; } } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Document/DocumentResponseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Document/DocumentResponseModel.cs index 57e5f7c640..49214d3aaa 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/Document/DocumentResponseModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Document/DocumentResponseModel.cs @@ -7,7 +7,7 @@ namespace Umbraco.Cms.Api.Management.ViewModels.Document; [ShortGenericSchemaName("ContentForDocumentResponseModel")] public class DocumentResponseModel : ContentResponseModelBase { - public IEnumerable Urls { get; set; } = Enumerable.Empty(); + public IEnumerable Urls { get; set; } = Enumerable.Empty(); public ReferenceByIdModel? Template { get; set; } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Document/DocumentUrlInfo.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Document/DocumentUrlInfo.cs new file mode 100644 index 0000000000..b672ce1db5 --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Document/DocumentUrlInfo.cs @@ -0,0 +1,7 @@ +using Umbraco.Cms.Api.Management.ViewModels.Content; + +namespace Umbraco.Cms.Api.Management.ViewModels.Document; + +public sealed class DocumentUrlInfo : ContentUrlInfoBase +{ +} diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Document/DocumentVariantItemResponseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Document/DocumentVariantItemResponseModel.cs new file mode 100644 index 0000000000..ccdc16ec0d --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Document/DocumentVariantItemResponseModel.cs @@ -0,0 +1,8 @@ +using Umbraco.Cms.Api.Management.ViewModels.Content; + +namespace Umbraco.Cms.Api.Management.ViewModels.Document; + +public class DocumentVariantItemResponseModel : VariantItemResponseModelBase +{ + public required DocumentVariantState State { get; set; } +} diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Document/DocumentVariantResponseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Document/DocumentVariantResponseModel.cs index adf0941681..7a3fac99a4 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/Document/DocumentVariantResponseModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Document/DocumentVariantResponseModel.cs @@ -4,7 +4,7 @@ namespace Umbraco.Cms.Api.Management.ViewModels.Document; public class DocumentVariantResponseModel : VariantResponseModelBase { - public ContentState State { get; set; } + public DocumentVariantState State { get; set; } public DateTime? PublishDate { get; set; } } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Content/ContentState.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Document/DocumentVariantState.cs similarity index 85% rename from src/Umbraco.Cms.Api.Management/ViewModels/Content/ContentState.cs rename to src/Umbraco.Cms.Api.Management/ViewModels/Document/DocumentVariantState.cs index 3bee0274d5..3ed51114e1 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/Content/ContentState.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Document/DocumentVariantState.cs @@ -1,9 +1,9 @@ -namespace Umbraco.Cms.Api.Management.ViewModels.Content; +namespace Umbraco.Cms.Api.Management.ViewModels.Document; /// /// The saved state of a content item /// -public enum ContentState +public enum DocumentVariantState { /// /// The item isn't created yet diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/DocumentType/CreateDocumentTypeRequestModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/DocumentType/CreateDocumentTypeRequestModel.cs index 488b210ab3..6bd3fc34c8 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/DocumentType/CreateDocumentTypeRequestModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/DocumentType/CreateDocumentTypeRequestModel.cs @@ -11,7 +11,7 @@ public class CreateDocumentTypeRequestModel public ReferenceByIdModel? DefaultTemplate { get; set; } - public ContentTypeCleanup Cleanup { get; set; } = new(); + public DocumentTypeCleanup Cleanup { get; set; } = new(); public IEnumerable AllowedDocumentTypes { get; set; } = Enumerable.Empty(); diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/DocumentType/DocumentTypeCleanup.cs b/src/Umbraco.Cms.Api.Management/ViewModels/DocumentType/DocumentTypeCleanup.cs new file mode 100644 index 0000000000..d793feac65 --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/ViewModels/DocumentType/DocumentTypeCleanup.cs @@ -0,0 +1,7 @@ +using Umbraco.Cms.Api.Management.ViewModels.ContentType; + +namespace Umbraco.Cms.Api.Management.ViewModels.DocumentType; + +public sealed class DocumentTypeCleanup : ContentTypeCleanupBase +{ +} diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/DocumentType/DocumentTypeResponseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/DocumentType/DocumentTypeResponseModel.cs index cb2f28f0a0..1ee38b2c97 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/DocumentType/DocumentTypeResponseModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/DocumentType/DocumentTypeResponseModel.cs @@ -10,7 +10,7 @@ public class DocumentTypeResponseModel : ContentTypeResponseModelBase AllowedDocumentTypes { get; set; } = Enumerable.Empty(); diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/DocumentType/UpdateDocumentTypeRequestModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/DocumentType/UpdateDocumentTypeRequestModel.cs index 90ed1f900c..a739c7d702 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/DocumentType/UpdateDocumentTypeRequestModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/DocumentType/UpdateDocumentTypeRequestModel.cs @@ -11,7 +11,7 @@ public class UpdateDocumentTypeRequestModel public ReferenceByIdModel? DefaultTemplate { get; set; } - public ContentTypeCleanup Cleanup { get; set; } = new(); + public DocumentTypeCleanup Cleanup { get; set; } = new(); public IEnumerable AllowedDocumentTypes { get; set; } = Enumerable.Empty(); diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/DynamicRoot/DynamicRootContextRequestModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/DynamicRoot/DynamicRootContextRequestModel.cs index e02c9d71bc..fe9790c4e8 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/DynamicRoot/DynamicRootContextRequestModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/DynamicRoot/DynamicRootContextRequestModel.cs @@ -4,7 +4,7 @@ public class DynamicRootContextRequestModel { public Guid? Id { get; set; } - public required Guid ParentId { get; set; } + public required ReferenceByIdModel Parent { get; set; } public string? Culture { get; set; } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/DynamicRoot/DynamicRootQueryOriginRequestModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/DynamicRoot/DynamicRootQueryOriginRequestModel.cs index f09976c12e..ec58bef0b5 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/DynamicRoot/DynamicRootQueryOriginRequestModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/DynamicRoot/DynamicRootQueryOriginRequestModel.cs @@ -4,5 +4,5 @@ public class DynamicRootQueryOriginRequestModel { public required string Alias { get; set; } - public Guid? Key { get; set; } + public Guid? Id { get; set; } } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Folder/CreateFolderRequestModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Folder/CreateFolderRequestModel.cs index 23246e2503..101b319501 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/Folder/CreateFolderRequestModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Folder/CreateFolderRequestModel.cs @@ -4,5 +4,5 @@ public class CreateFolderRequestModel : FolderModelBase { public Guid? Id { get; set; } - public Guid? ParentId { get; set; } + public ReferenceByIdModel? Parent { get; set; } } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Folder/FolderResponseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Folder/FolderResponseModel.cs index 7babf1b5eb..217251ca6c 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/Folder/FolderResponseModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Folder/FolderResponseModel.cs @@ -4,5 +4,5 @@ public class FolderResponseModel : FolderModelBase { public Guid Id { get; set; } - public Guid? ParentId { get; set; } + public ReferenceByIdModel? Parent { get; set; } } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/HealthCheck/HealthCheckActionRequestModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/HealthCheck/HealthCheckActionRequestModel.cs index c289a339b3..0633ad8adc 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/HealthCheck/HealthCheckActionRequestModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/HealthCheck/HealthCheckActionRequestModel.cs @@ -5,7 +5,7 @@ public class HealthCheckActionRequestModel /// /// Gets or sets the health check key. /// - public Guid HealthCheckId { get; set; } + public required ReferenceByIdModel HealthCheck { get; set; } /// /// Gets or sets the alias. diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Media/MediaResponseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Media/MediaResponseModel.cs index 964351f07e..0b59901e5f 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/Media/MediaResponseModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Media/MediaResponseModel.cs @@ -7,7 +7,7 @@ namespace Umbraco.Cms.Api.Management.ViewModels.Media; [ShortGenericSchemaName("ContentForMediaResponseModel")] public class MediaResponseModel : ContentResponseModelBase { - public IEnumerable Urls { get; set; } = Enumerable.Empty(); + public IEnumerable Urls { get; set; } = Enumerable.Empty(); public bool IsTrashed { get; set; } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Media/MediaUrlInfo.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Media/MediaUrlInfo.cs new file mode 100644 index 0000000000..ca6905f4ce --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Media/MediaUrlInfo.cs @@ -0,0 +1,7 @@ +using Umbraco.Cms.Api.Management.ViewModels.Content; + +namespace Umbraco.Cms.Api.Management.ViewModels.Media; + +public sealed class MediaUrlInfo : ContentUrlInfoBase +{ +} diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/PublicAccess/PublicAccessBaseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/PublicAccess/PublicAccessBaseModel.cs index e329879c68..5d45069730 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/PublicAccess/PublicAccessBaseModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/PublicAccess/PublicAccessBaseModel.cs @@ -2,7 +2,7 @@ public class PublicAccessBaseModel { - public Guid LoginPageId { get; set; } + public required ReferenceByIdModel LoginDocument { get; set; } - public Guid ErrorPageId { get; set; } + public required ReferenceByIdModel ErrorDocument { get; set; } } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/RedirectUrlManagement/RedirectUrlResponseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/RedirectUrlManagement/RedirectUrlResponseModel.cs index 0f419ec1d9..92c6ca4d22 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/RedirectUrlManagement/RedirectUrlResponseModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/RedirectUrlManagement/RedirectUrlResponseModel.cs @@ -10,7 +10,7 @@ public class RedirectUrlResponseModel public DateTime Created { get; set; } - public Guid ContentId { get; set; } + public required ReferenceByIdModel Document { get; set; } public string? Culture { get; set; } } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/ReferenceByIdModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/ReferenceByIdModel.cs index 591e77e575..1c0302f691 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/ReferenceByIdModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/ReferenceByIdModel.cs @@ -11,5 +11,8 @@ public sealed class ReferenceByIdModel public ReferenceByIdModel(Guid id) => Id = id; + public static ReferenceByIdModel? ReferenceOrNull(Guid? id) + => id.HasValue ? new ReferenceByIdModel(id.Value) : null; + public Guid Id { get; set; } } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Security/VerifyResetPasswordTokenRequestModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Security/VerifyResetPasswordTokenRequestModel.cs index 3ba5f71a6a..ebfdd64e1a 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/Security/VerifyResetPasswordTokenRequestModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Security/VerifyResetPasswordTokenRequestModel.cs @@ -1,10 +1,8 @@ -using System.ComponentModel.DataAnnotations; - namespace Umbraco.Cms.Api.Management.ViewModels.Security; public class VerifyResetPasswordTokenRequestModel { - public Guid UserId { get; set; } - [Required] - public string ResetCode { get; set; } = string.Empty; + public required ReferenceByIdModel User { get; set; } + + public required string ResetCode { get; set; } } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Sorting/SortingRequestModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Sorting/SortingRequestModel.cs index d58897ab63..eff2110795 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/Sorting/SortingRequestModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Sorting/SortingRequestModel.cs @@ -2,7 +2,7 @@ public class SortingRequestModel { - public Guid? ParentId { get; init; } + public ReferenceByIdModel? Parent { get; init; } public required IEnumerable Sorting { get; init; } } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Template/CreateTemplateRequestModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Template/CreateTemplateRequestModel.cs index cf02fc2860..29f32468bb 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/Template/CreateTemplateRequestModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Template/CreateTemplateRequestModel.cs @@ -2,5 +2,5 @@ public class CreateTemplateRequestModel : TemplateModelBase { - public Guid? Key { get; set; } + public Guid? Id { get; set; } } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Template/Query/TemplateQueryExecuteModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Template/Query/TemplateQueryExecuteModel.cs index 2d2fa40442..ce0733bc4d 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/Template/Query/TemplateQueryExecuteModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Template/Query/TemplateQueryExecuteModel.cs @@ -2,9 +2,9 @@ public class TemplateQueryExecuteModel { - public Guid? RootContentId { get; set; } + public ReferenceByIdModel? RootDocument { get; set; } - public string? ContentTypeAlias { get; set; } + public string? DocumentTypeAlias { get; set; } public IEnumerable? Filters { get; set; } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Template/Query/TemplateQuerySettingsResponseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Template/Query/TemplateQuerySettingsResponseModel.cs index 53e5ecc0c0..f3be147a72 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/Template/Query/TemplateQuerySettingsResponseModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Template/Query/TemplateQuerySettingsResponseModel.cs @@ -2,7 +2,7 @@ public class TemplateQuerySettingsResponseModel { - public required IEnumerable ContentTypeAliases { get; init; } + public required IEnumerable DocumentTypeAliases { get; init; } public required IEnumerable Properties { get; init; } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Template/TemplateResponseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Template/TemplateResponseModel.cs index 9a9a4b0496..1f4d0e799d 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/Template/TemplateResponseModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Template/TemplateResponseModel.cs @@ -4,5 +4,5 @@ public class TemplateResponseModel : TemplateModelBase { public Guid Id { get; set; } - public Guid? MasterTemplateId { get; set; } + public ReferenceByIdModel? MasterTemplate { get; set; } } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Tree/ContentTreeItemResponseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Tree/ContentTreeItemResponseModel.cs index 266924373b..58cbc4e4de 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/Tree/ContentTreeItemResponseModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Tree/ContentTreeItemResponseModel.cs @@ -1,6 +1,6 @@ namespace Umbraco.Cms.Api.Management.ViewModels.Tree; -public class ContentTreeItemResponseModel : EntityTreeItemResponseModel +public abstract class ContentTreeItemResponseModel : EntityTreeItemResponseModel { public bool NoAccess { get; set; } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Tree/DocumentBlueprintTreeItemResponseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Tree/DocumentBlueprintTreeItemResponseModel.cs index 60aa9ab8b0..14dc79b94c 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/Tree/DocumentBlueprintTreeItemResponseModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Tree/DocumentBlueprintTreeItemResponseModel.cs @@ -1,10 +1,8 @@ -namespace Umbraco.Cms.Api.Management.ViewModels.Tree; +using Umbraco.Cms.Api.Management.ViewModels.DocumentType; + +namespace Umbraco.Cms.Api.Management.ViewModels.Tree; public class DocumentBlueprintTreeItemResponseModel : NamedEntityTreeItemResponseModel { - public Guid DocumentTypeId { get; set; } - - public string DocumentTypeAlias { get; set; } = string.Empty; - - public string? DocumentTypeName { get; set; } = string.Empty; + public DocumentTypeReferenceResponseModel DocumentType { get; set; } = new(); } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Tree/DocumentTreeItemResponseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Tree/DocumentTreeItemResponseModel.cs index 8aa8b9c281..094522b91a 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/Tree/DocumentTreeItemResponseModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Tree/DocumentTreeItemResponseModel.cs @@ -1,4 +1,5 @@ using Umbraco.Cms.Api.Management.ViewModels.Content; +using Umbraco.Cms.Api.Management.ViewModels.Document; using Umbraco.Cms.Api.Management.ViewModels.DocumentType; namespace Umbraco.Cms.Api.Management.ViewModels.Tree; diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/User/CreateUserResponseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/User/CreateUserResponseModel.cs index 8946447b10..bcad328909 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/User/CreateUserResponseModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/User/CreateUserResponseModel.cs @@ -2,7 +2,7 @@ public class CreateUserResponseModel { - public Guid UserId { get; set; } + public required ReferenceByIdModel User { get; set; } public string? InitialPassword { get; set; } } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/User/Current/CurrentUserResponseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/User/Current/CurrentUserResponseModel.cs index c7860ec78b..d8fc5ab4f6 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/User/Current/CurrentUserResponseModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/User/Current/CurrentUserResponseModel.cs @@ -12,7 +12,7 @@ public class CurrentUserResponseModel public required string? LanguageIsoCode { get; init; } - public required ISet ContentStartNodeIds { get; init; } = new HashSet(); + public required ISet DocumentStartNodeIds { get; init; } = new HashSet(); public required ISet MediaStartNodeIds { get; init; } = new HashSet(); diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/User/ResendInviteUserRequestModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/User/ResendInviteUserRequestModel.cs index ce0a9ee004..0c4c80ad6d 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/User/ResendInviteUserRequestModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/User/ResendInviteUserRequestModel.cs @@ -1,11 +1,8 @@ -using System.ComponentModel.DataAnnotations; - namespace Umbraco.Cms.Api.Management.ViewModels.User; public class ResendInviteUserRequestModel { - [Required] - public Guid UserId { get; set; } = Guid.Empty; + public required ReferenceByIdModel User { get; set; } public string? Message { get; set; } } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/User/SetAvatarRequestModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/User/SetAvatarRequestModel.cs index 98897ab50d..48c5636a6f 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/User/SetAvatarRequestModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/User/SetAvatarRequestModel.cs @@ -2,5 +2,5 @@ public class SetAvatarRequestModel { - public Guid FileId { get; set; } + public required ReferenceByIdModel File { get; set; } } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/User/UpdateUserRequestModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/User/UpdateUserRequestModel.cs index 5b6cb80ce7..da927a477b 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/User/UpdateUserRequestModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/User/UpdateUserRequestModel.cs @@ -4,7 +4,7 @@ public class UpdateUserRequestModel : UserPresentationBase { public string LanguageIsoCode { get; set; } = string.Empty; - public ISet ContentStartNodeIds { get; set; } = new HashSet(); + public ISet DocumentStartNodeIds { get; set; } = new HashSet(); public ISet MediaStartNodeIds { get; set; } = new HashSet(); } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/User/UserResponseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/User/UserResponseModel.cs index f601f8afa8..7fa165dec5 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/User/UserResponseModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/User/UserResponseModel.cs @@ -8,7 +8,7 @@ public class UserResponseModel : UserPresentationBase public string? LanguageIsoCode { get; set; } - public ISet ContentStartNodeIds { get; set; } = new HashSet(); + public ISet DocumentStartNodeIds { get; set; } = new HashSet(); public ISet MediaStartNodeIds { get; set; } = new HashSet(); diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/User/VerifyInviteUserRequestModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/User/VerifyInviteUserRequestModel.cs index d57bc2ee2c..ddc837189d 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/User/VerifyInviteUserRequestModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/User/VerifyInviteUserRequestModel.cs @@ -4,8 +4,7 @@ namespace Umbraco.Cms.Api.Management.ViewModels.User; public class VerifyInviteUserRequestModel { - [Required] - public Guid UserId { get; set; } = Guid.Empty; + public required ReferenceByIdModel User { get; set; } [Required] public string Token { get; set; } = string.Empty; diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/UserGroup/UserGroupBase.cs b/src/Umbraco.Cms.Api.Management/ViewModels/UserGroup/UserGroupBase.cs index 998b42b2e9..5156d943c2 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/UserGroup/UserGroupBase.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/UserGroup/UserGroupBase.cs @@ -41,12 +41,12 @@ public class UserGroupBase /// This can be overwritten by a different user group if a user is a member of multiple groups /// /// - public Guid? DocumentStartNodeId { get; init; } + public ReferenceByIdModel? DocumentStartNode { get; init; } /// /// If the group should have access to the document root. /// - /// This will be ignored if an explicit start node has been specified in . + /// This will be ignored if an explicit start node has been specified in . /// /// public bool DocumentRootAccess { get; init; } @@ -57,12 +57,12 @@ public class UserGroupBase /// This can be overwritten by a different user group if a user is a member of multiple groups /// /// - public Guid? MediaStartNodeId { get; init; } + public ReferenceByIdModel? MediaStartNode { get; init; } /// /// If the group should have access to the media root. /// - /// This will be ignored if an explicit start node has been specified in . + /// This will be ignored if an explicit start node has been specified in . /// /// public bool MediaRootAccess { get; init; } diff --git a/src/Umbraco.Cms.StaticAssets/umbraco/UmbracoBackOffice/Default.cshtml b/src/Umbraco.Cms.StaticAssets/umbraco/UmbracoBackOffice/Default.cshtml index 27849ee098..ad295f4d0e 100644 --- a/src/Umbraco.Cms.StaticAssets/umbraco/UmbracoBackOffice/Default.cshtml +++ b/src/Umbraco.Cms.StaticAssets/umbraco/UmbracoBackOffice/Default.cshtml @@ -94,13 +94,15 @@ @Html.Raw(ImportMapValue("@umbraco-cms/backoffice/temporary-file", backofficeAssetsPath + "/packages/core/temporary-file/index.js")), @Html.Raw(ImportMapValue("@umbraco-cms/backoffice/data-type", backofficeAssetsPath + "/packages/core/data-type/index.js")), - @Html.Raw(ImportMapValue("@umbraco-cms/backoffice/language", backofficeAssetsPath + "/packages/settings/languages/index.js")), @Html.Raw(ImportMapValue("@umbraco-cms/backoffice/logviewer", backofficeAssetsPath + "/packages/settings/logviewer/index.js")), @Html.Raw(ImportMapValue("@umbraco-cms/backoffice/relation-types", backofficeAssetsPath + "/packages/settings/relation-types/index.js")), @Html.Raw(ImportMapValue("@umbraco-cms/backoffice/relations", backofficeAssetsPath + "/packages/settings/relations/index.js")), @Html.Raw(ImportMapValue("@umbraco-cms/backoffice/tags", backofficeAssetsPath + "/packages/tags/index.js")), + @Html.Raw(ImportMapValue("@umbraco-cms/backoffice/static-file", backofficeAssetsPath + "/packages/static-file/index.js")), + @Html.Raw(ImportMapValue("@umbraco-cms/backoffice/language", backofficeAssetsPath + "/packages/language/index.js")), + @Html.Raw(ImportMapValue("@umbraco-cms/backoffice/block", backofficeAssetsPath + "/packages/block/index.js")), @Html.Raw(ImportMapValue("@umbraco-cms/backoffice/audit-log", backofficeAssetsPath + "/packages/audit-log/index.js")), @Html.Raw(ImportMapValue("@umbraco-cms/backoffice/dictionary", backofficeAssetsPath + "/packages/dictionary/dictionary/index.js")), diff --git a/src/Umbraco.Cms.StaticAssets/umbraco/UmbracoInstall/Index.cshtml b/src/Umbraco.Cms.StaticAssets/umbraco/UmbracoInstall/Index.cshtml index 27849ee098..f510f573ab 100644 --- a/src/Umbraco.Cms.StaticAssets/umbraco/UmbracoInstall/Index.cshtml +++ b/src/Umbraco.Cms.StaticAssets/umbraco/UmbracoInstall/Index.cshtml @@ -94,13 +94,14 @@ @Html.Raw(ImportMapValue("@umbraco-cms/backoffice/temporary-file", backofficeAssetsPath + "/packages/core/temporary-file/index.js")), @Html.Raw(ImportMapValue("@umbraco-cms/backoffice/data-type", backofficeAssetsPath + "/packages/core/data-type/index.js")), - @Html.Raw(ImportMapValue("@umbraco-cms/backoffice/language", backofficeAssetsPath + "/packages/settings/languages/index.js")), @Html.Raw(ImportMapValue("@umbraco-cms/backoffice/logviewer", backofficeAssetsPath + "/packages/settings/logviewer/index.js")), @Html.Raw(ImportMapValue("@umbraco-cms/backoffice/relation-types", backofficeAssetsPath + "/packages/settings/relation-types/index.js")), @Html.Raw(ImportMapValue("@umbraco-cms/backoffice/relations", backofficeAssetsPath + "/packages/settings/relations/index.js")), @Html.Raw(ImportMapValue("@umbraco-cms/backoffice/tags", backofficeAssetsPath + "/packages/tags/index.js")), @Html.Raw(ImportMapValue("@umbraco-cms/backoffice/static-file", backofficeAssetsPath + "/packages/static-file/index.js")), + @Html.Raw(ImportMapValue("@umbraco-cms/backoffice/language", backofficeAssetsPath + "/packages/language/index.js")), + @Html.Raw(ImportMapValue("@umbraco-cms/backoffice/block", backofficeAssetsPath + "/packages/block/index.js")), @Html.Raw(ImportMapValue("@umbraco-cms/backoffice/audit-log", backofficeAssetsPath + "/packages/audit-log/index.js")), @Html.Raw(ImportMapValue("@umbraco-cms/backoffice/dictionary", backofficeAssetsPath + "/packages/dictionary/dictionary/index.js")), diff --git a/src/Umbraco.Core/Constants-Web.cs b/src/Umbraco.Core/Constants-Web.cs index 0c39c1b1b0..ad199b0cbc 100644 --- a/src/Umbraco.Core/Constants-Web.cs +++ b/src/Umbraco.Core/Constants-Web.cs @@ -68,6 +68,7 @@ public static partial class Constants { public const string Tree = "tree"; public const string RecycleBin = "recycle-bin"; + public const string Item = "item"; } public static class AttributeRouting diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Cms.Api.Management/Mapping/Content/ContentStateHelperTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Cms.Api.Management/Mapping/Content/DocumentVariantStateHelperTests.cs similarity index 63% rename from tests/Umbraco.Tests.UnitTests/Umbraco.Cms.Api.Management/Mapping/Content/ContentStateHelperTests.cs rename to tests/Umbraco.Tests.UnitTests/Umbraco.Cms.Api.Management/Mapping/Content/DocumentVariantStateHelperTests.cs index ba6609a0dc..d63eda2eed 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Cms.Api.Management/Mapping/Content/ContentStateHelperTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Cms.Api.Management/Mapping/Content/DocumentVariantStateHelperTests.cs @@ -2,22 +2,23 @@ using NUnit.Framework; using Umbraco.Cms.Api.Management.Mapping.Content; using Umbraco.Cms.Api.Management.ViewModels.Content; +using Umbraco.Cms.Api.Management.ViewModels.Document; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Models.Entities; namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Cms.Api.Management.Mapping.Content; [TestFixture] -public class ContentStateHelperTests +public class DocumentVariantStateHelperTests { - [TestCase(false, false, ContentState.Draft)] - [TestCase(false, true, ContentState.Published)] - [TestCase(true, false, ContentState.Draft)] - [TestCase(true, true, ContentState.PublishedPendingChanges)] - public void Culture_Invariant_Content_State(bool edited, bool published, ContentState expectedResult) + [TestCase(false, false, DocumentVariantState.Draft)] + [TestCase(false, true, DocumentVariantState.Published)] + [TestCase(true, false, DocumentVariantState.Draft)] + [TestCase(true, true, DocumentVariantState.PublishedPendingChanges)] + public void Culture_Invariant_Content_State(bool edited, bool published, DocumentVariantState expectedResult) { var content = Mock.Of(c => c.Id == 1 && c.Published == published && c.Edited == edited); - Assert.AreEqual(expectedResult, ContentStateHelper.GetContentState(content, culture: null)); + Assert.AreEqual(expectedResult, DocumentVariantStateHelper.GetState(content, culture: null)); } [TestCase(false, false)] @@ -27,14 +28,14 @@ public class ContentStateHelperTests public void Culture_Invariant_Content_Not_Created_State(bool edited, bool published) { var content = Mock.Of(c => c.Id == 0 && c.Published == published && c.Edited == edited); - Assert.AreEqual(ContentState.NotCreated, ContentStateHelper.GetContentState(content, culture: null)); + Assert.AreEqual(DocumentVariantState.NotCreated, DocumentVariantStateHelper.GetState(content, culture: null)); } - [TestCase(false, false, ContentState.Draft)] - [TestCase(false, true, ContentState.Published)] - [TestCase(true, false, ContentState.Draft)] - [TestCase(true, true, ContentState.PublishedPendingChanges)] - public void Culture_Variant_Content_Existing_Culture_State(bool edited, bool published, ContentState expectedResult) + [TestCase(false, false, DocumentVariantState.Draft)] + [TestCase(false, true, DocumentVariantState.Published)] + [TestCase(true, false, DocumentVariantState.Draft)] + [TestCase(true, true, DocumentVariantState.PublishedPendingChanges)] + public void Culture_Variant_Content_Existing_Culture_State(bool edited, bool published, DocumentVariantState expectedResult) { const string culture = "en"; var content = Mock.Of(c => @@ -43,7 +44,7 @@ public class ContentStateHelperTests && c.EditedCultures == (edited ? new[] { culture } : Enumerable.Empty()) && c.Published == published && c.PublishedCultures == (published ? new[] { culture } : Enumerable.Empty())); - Assert.AreEqual(expectedResult, ContentStateHelper.GetContentState(content, culture)); + Assert.AreEqual(expectedResult, DocumentVariantStateHelper.GetState(content, culture)); } [TestCase(false, false)] @@ -59,17 +60,17 @@ public class ContentStateHelperTests && c.EditedCultures == (edited ? new[] { culture } : Enumerable.Empty()) && c.Published == published && c.PublishedCultures == (published ? new[] { culture } : Enumerable.Empty())); - Assert.AreEqual(ContentState.NotCreated, ContentStateHelper.GetContentState(content, "dk")); + Assert.AreEqual(DocumentVariantState.NotCreated, DocumentVariantStateHelper.GetState(content, "dk")); } - [TestCase(false, false, ContentState.Draft)] - [TestCase(false, true, ContentState.Published)] - [TestCase(true, false, ContentState.Draft)] - [TestCase(true, true, ContentState.PublishedPendingChanges)] - public void Culture_Invariant_DocumentEntitySlim_State(bool edited, bool published, ContentState expectedResult) + [TestCase(false, false, DocumentVariantState.Draft)] + [TestCase(false, true, DocumentVariantState.Published)] + [TestCase(true, false, DocumentVariantState.Draft)] + [TestCase(true, true, DocumentVariantState.PublishedPendingChanges)] + public void Culture_Invariant_DocumentEntitySlim_State(bool edited, bool published, DocumentVariantState expectedResult) { var entity = Mock.Of(c => c.Id == 1 && c.Published == published && c.Edited == edited && c.CultureNames == new Dictionary()); - Assert.AreEqual(expectedResult, ContentStateHelper.GetContentState(entity, culture: null)); + Assert.AreEqual(expectedResult, DocumentVariantStateHelper.GetState(entity, culture: null)); } [TestCase(false, false)] @@ -79,14 +80,14 @@ public class ContentStateHelperTests public void Culture_Invariant_DocumentEntitySlim_Not_Created_State(bool edited, bool published) { var entity = Mock.Of(c => c.Id == 0 && c.Published == published && c.Edited == edited && c.CultureNames == new Dictionary()); - Assert.AreEqual(ContentState.NotCreated, ContentStateHelper.GetContentState(entity, culture: null)); + Assert.AreEqual(DocumentVariantState.NotCreated, DocumentVariantStateHelper.GetState(entity, culture: null)); } - [TestCase(false, false, ContentState.Draft)] - [TestCase(false, true, ContentState.Published)] - [TestCase(true, false, ContentState.Draft)] - [TestCase(true, true, ContentState.PublishedPendingChanges)] - public void Culture_Variant_DocumentEntitySlim_Existing_Culture_State(bool edited, bool published, ContentState expectedResult) + [TestCase(false, false, DocumentVariantState.Draft)] + [TestCase(false, true, DocumentVariantState.Published)] + [TestCase(true, false, DocumentVariantState.Draft)] + [TestCase(true, true, DocumentVariantState.PublishedPendingChanges)] + public void Culture_Variant_DocumentEntitySlim_Existing_Culture_State(bool edited, bool published, DocumentVariantState expectedResult) { const string culture = "en"; var entity = Mock.Of(c => @@ -95,7 +96,7 @@ public class ContentStateHelperTests && c.EditedCultures == (edited ? new[] { culture } : Enumerable.Empty()) && c.Published == published && c.PublishedCultures == (published ? new[] { culture } : Enumerable.Empty())); - Assert.AreEqual(expectedResult, ContentStateHelper.GetContentState(entity, culture)); + Assert.AreEqual(expectedResult, DocumentVariantStateHelper.GetState(entity, culture)); } [TestCase(false, false)] @@ -111,6 +112,6 @@ public class ContentStateHelperTests && c.EditedCultures == (edited ? new[] { culture } : Enumerable.Empty()) && c.Published == published && c.PublishedCultures == (published ? new[] { culture } : Enumerable.Empty())); - Assert.AreEqual(ContentState.NotCreated, ContentStateHelper.GetContentState(entity, "dk")); + Assert.AreEqual(DocumentVariantState.NotCreated, DocumentVariantStateHelper.GetState(entity, "dk")); } }