diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Culture/AllCultureController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Culture/AllCultureController.cs
deleted file mode 100644
index f1ff94cce7..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Culture/AllCultureController.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using System.Globalization;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Mapping;
-using Umbraco.Cms.Api.Management.ViewModels.Culture;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Culture;
-
-public class AllCultureController : CultureControllerBase
-{
- private readonly IUmbracoMapper _umbracoMapper;
-
- public AllCultureController(IUmbracoMapper umbracoMapper) => _umbracoMapper = umbracoMapper;
-
- ///
- /// Returns all cultures available for creating languages.
- ///
- ///
- [HttpGet]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task> GetAll(int skip, int take)
- {
- IEnumerable list = CultureInfo.GetCultures(CultureTypes.AllCultures)
- .DistinctBy(x => x.Name)
- .OrderBy(x => x.EnglishName)
- .Skip(skip)
- .Take(take);
-
- return await Task.FromResult(_umbracoMapper.Map>(list)!);
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Culture/CultureControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Culture/CultureControllerBase.cs
deleted file mode 100644
index 7355345493..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Culture/CultureControllerBase.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Culture;
-
-[ApiController]
-[VersionedApiBackOfficeRoute("culture")]
-[ApiExplorerSettings(GroupName = "Culture")]
-[ApiVersion("1.0")]
-public abstract class CultureControllerBase : ManagementApiControllerBase
-{
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/DataType/Tree/ChildrenDataTypeTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/DataType/Tree/ChildrenDataTypeTreeController.cs
deleted file mode 100644
index f792c2c494..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/DataType/Tree/ChildrenDataTypeTreeController.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-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.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.DataType.Tree;
-
-public class ChildrenDataTypeTreeController : DataTypeTreeControllerBase
-{
- public ChildrenDataTypeTreeController(IEntityService entityService, IDataTypeService dataTypeService)
- : base(entityService, dataTypeService)
- {
- }
-
- [HttpGet("children")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Children(Guid parentKey, int skip = 0, int take = 100, bool foldersOnly = false)
- {
- RenderFoldersOnly(foldersOnly);
- return await GetChildren(parentKey, skip, take);
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/DataType/Tree/DataTypeTreeControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/DataType/Tree/DataTypeTreeControllerBase.cs
deleted file mode 100644
index b92aa99ddb..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/DataType/Tree/DataTypeTreeControllerBase.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core;
-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.ViewModels.Tree;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.DataType.Tree;
-
-[ApiVersion("1.0")]
-[ApiController]
-[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Tree}/{Constants.UdiEntityType.DataType}")]
-[ApiExplorerSettings(GroupName = "Data Type")]
-public class DataTypeTreeControllerBase : FolderTreeControllerBase
-{
- private readonly IDataTypeService _dataTypeService;
-
- public DataTypeTreeControllerBase(IEntityService entityService, IDataTypeService dataTypeService)
- : base(entityService) =>
- _dataTypeService = dataTypeService;
-
- protected override UmbracoObjectTypes ItemObjectType => UmbracoObjectTypes.DataType;
-
- protected override UmbracoObjectTypes FolderObjectType => UmbracoObjectTypes.DataTypeContainer;
-
- protected override FolderTreeItemViewModel[] MapTreeItemViewModels(Guid? parentKey, IEntitySlim[] entities)
- {
- var dataTypes = _dataTypeService
- .GetAll(entities.Select(entity => entity.Id).ToArray())
- .ToDictionary(contentType => contentType.Id);
-
- return entities.Select(entity =>
- {
- FolderTreeItemViewModel viewModel = MapTreeItemViewModel(parentKey, entity);
- if (dataTypes.TryGetValue(entity.Id, out IDataType? dataType))
- {
- viewModel.Icon = dataType.Editor?.Icon ?? viewModel.Icon;
- }
-
- return viewModel;
- }).ToArray();
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/DataType/Tree/ItemsDataTypeTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/DataType/Tree/ItemsDataTypeTreeController.cs
deleted file mode 100644
index 6e4cf2791c..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/DataType/Tree/ItemsDataTypeTreeController.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.DataType.Tree;
-
-public class ItemsDataTypeTreeController : DataTypeTreeControllerBase
-{
- public ItemsDataTypeTreeController(IEntityService entityService, IDataTypeService dataTypeService)
- : base(entityService, dataTypeService)
- {
- }
-
- [HttpGet("item")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)]
- public async Task>> Items([FromQuery(Name = "key")] Guid[] keys)
- => await GetItems(keys);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/DataType/Tree/RootDataTypeTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/DataType/Tree/RootDataTypeTreeController.cs
deleted file mode 100644
index d14b8fa066..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/DataType/Tree/RootDataTypeTreeController.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-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.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.DataType.Tree;
-
-public class RootDataTypeTreeController : DataTypeTreeControllerBase
-{
- public RootDataTypeTreeController(IEntityService entityService, IDataTypeService dataTypeService)
- : base(entityService, dataTypeService)
- {
- }
-
- [HttpGet("root")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Root(int skip = 0, int take = 100, bool foldersOnly = false)
- {
- RenderFoldersOnly(foldersOnly);
- return await GetRoot(skip, take);
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/AllDictionaryController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/AllDictionaryController.cs
deleted file mode 100644
index 4415a5ff5f..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/AllDictionaryController.cs
+++ /dev/null
@@ -1,69 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Mapping;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.ViewModels.Dictionary;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Dictionary;
-
-public class AllDictionaryController : DictionaryControllerBase
-{
- private readonly ILocalizationService _localizationService;
- private readonly IUmbracoMapper _umbracoMapper;
-
- public AllDictionaryController(ILocalizationService localizationService, IUmbracoMapper umbracoMapper)
- {
- _localizationService = localizationService;
- _umbracoMapper = umbracoMapper;
- }
-
-
- ///
- /// Retrieves a list with all dictionary items
- ///
- ///
- /// The .
- ///
- [HttpGet]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> All(int skip, int take)
- {
- IDictionaryItem[] items = _localizationService.GetDictionaryItemDescendants(null).ToArray();
- var list = new List(items.Length);
-
- // Build the proper tree structure, as we can have nested dictionary items
- BuildTree(list, items);
-
- var model = new PagedViewModel
- {
- Total = list.Count,
- Items = list.Skip(skip).Take(take),
- };
- return await Task.FromResult(model);
- }
-
- // recursive method to build a tree structure from the flat structure returned above
- private void BuildTree(List list, IDictionaryItem[] items, int level = 0, Guid? parentId = null)
- {
- IDictionaryItem[] children = items.Where(t => t.ParentId == parentId).ToArray();
- if (children.Any() == false)
- {
- return;
- }
-
- foreach (IDictionaryItem child in children.OrderBy(item => item.ItemKey))
- {
- DictionaryOverviewViewModel? display = _umbracoMapper.Map(child);
- if (display is not null)
- {
- display.Level = level;
- list.Add(display);
- }
-
- BuildTree(list, items, level + 1, child.Key);
- }
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/ByKeyDictionaryController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/ByKeyDictionaryController.cs
deleted file mode 100644
index a595296dc3..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/ByKeyDictionaryController.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Models.ContentEditing;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.ViewModels.Dictionary;
-using Umbraco.New.Cms.Core.Factories;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Dictionary;
-
-public class ByIdDictionaryController : DictionaryControllerBase
-{
- private readonly ILocalizationService _localizationService;
- private readonly IDictionaryFactory _dictionaryFactory;
-
- public ByIdDictionaryController(
- ILocalizationService localizationService,
- IDictionaryFactory dictionaryFactory)
- {
- _localizationService = localizationService;
- _dictionaryFactory = dictionaryFactory;
- }
-
- ///
- /// Gets a dictionary item by guid
- ///
- ///
- /// The id.
- ///
- ///
- /// The . Returns a not found response when dictionary item does not exist
- ///
- [HttpGet("{key:guid}")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(DictionaryViewModel), StatusCodes.Status200OK)]
- [ProducesResponseType(typeof(NotFoundResult), StatusCodes.Status404NotFound)]
- public async Task> ByKey(Guid key)
- {
- IDictionaryItem? dictionary = _localizationService.GetDictionaryItemById(key);
- if (dictionary == null)
- {
- return NotFound();
- }
-
- return await Task.FromResult(_dictionaryFactory.CreateDictionaryViewModel(dictionary));
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/CreateDictionaryController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/CreateDictionaryController.cs
deleted file mode 100644
index ab0cc69625..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/CreateDictionaryController.cs
+++ /dev/null
@@ -1,90 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.Logging;
-using Microsoft.Extensions.Options;
-using Umbraco.Cms.Core.Configuration.Models;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Security;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.ViewModels.Dictionary;
-using Umbraco.Extensions;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Dictionary;
-
-public class CreateDictionaryController : DictionaryControllerBase
-{
- private readonly ILocalizationService _localizationService;
- private readonly ILocalizedTextService _localizedTextService;
- private readonly GlobalSettings _globalSettings;
- private readonly IBackOfficeSecurityAccessor _backofficeSecurityAccessor;
- private readonly ILogger _logger;
-
- public CreateDictionaryController(
- ILocalizationService localizationService,
- ILocalizedTextService localizedTextService,
- IOptionsSnapshot globalSettings,
- IBackOfficeSecurityAccessor backofficeSecurityAccessor,
- ILogger logger)
- {
- _localizationService = localizationService;
- _localizedTextService = localizedTextService;
- _globalSettings = globalSettings.Value;
- _backofficeSecurityAccessor = backofficeSecurityAccessor;
- _logger = logger;
- }
-
- ///
- /// Creates a new dictionary item
- ///
- /// The viewmodel to pass to the action
- ///
- /// The .
- ///
- [HttpPost]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(CreatedResult), StatusCodes.Status201Created)]
- [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
- public async Task> Create(DictionaryItemViewModel dictionaryViewModel)
- {
- if (string.IsNullOrEmpty(dictionaryViewModel.Key.ToString()))
- {
- return ValidationProblem("Key can not be empty."); // TODO: translate
- }
-
- if (_localizationService.DictionaryItemExists(dictionaryViewModel.Key.ToString()))
- {
- var message = _localizedTextService.Localize(
- "dictionaryItem",
- "changeKeyError",
- _backofficeSecurityAccessor.BackOfficeSecurity?.CurrentUser?.GetUserCulture(_localizedTextService, _globalSettings),
- new Dictionary
- {
- { "0", dictionaryViewModel.Key.ToString() },
- });
- return await Task.FromResult(ValidationProblem(message));
- }
-
- try
- {
- Guid? parentGuid = null;
-
- if (dictionaryViewModel.ParentId.HasValue)
- {
- parentGuid = dictionaryViewModel.ParentId;
- }
-
- IDictionaryItem item = _localizationService.CreateDictionaryItemWithIdentity(
- dictionaryViewModel.Key.ToString(),
- parentGuid,
- string.Empty);
-
-
- return await Task.FromResult(Created($"api/v1.0/dictionary/{item.Key}", item.Key));
- }
- catch (Exception ex)
- {
- _logger.LogError(ex, "Error creating dictionary with {Name} under {ParentId}", dictionaryViewModel.Key, dictionaryViewModel.ParentId);
- return await Task.FromResult(ValidationProblem("Error creating dictionary item"));
- }
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/DeleteDictionaryController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/DeleteDictionaryController.cs
deleted file mode 100644
index 0f86cc0e5a..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/DeleteDictionaryController.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Security;
-using Umbraco.Cms.Core.Services;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Dictionary;
-
-public class DeleteDictionaryController : DictionaryControllerBase
-{
- private readonly ILocalizationService _localizationService;
- private readonly IBackOfficeSecurityAccessor _backOfficeSecurityAccessor;
-
- public DeleteDictionaryController(ILocalizationService localizationService, IBackOfficeSecurityAccessor backOfficeSecurityAccessor)
- {
- _localizationService = localizationService;
- _backOfficeSecurityAccessor = backOfficeSecurityAccessor;
- }
- ///
- /// Deletes a data type with a given ID
- ///
- /// The key of the dictionary item to delete
- ///
- ///
- ///
- [HttpDelete("{key}")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(StatusCodes.Status200OK)]
- [ProducesResponseType(typeof(NotFoundResult), StatusCodes.Status404NotFound)]
- public async Task Delete(Guid key)
- {
- IDictionaryItem? foundDictionary = _localizationService.GetDictionaryItemByKey(key.ToString());
-
- if (foundDictionary == null)
- {
- return await Task.FromResult(NotFound());
- }
-
- IEnumerable foundDictionaryDescendants =
- _localizationService.GetDictionaryItemDescendants(foundDictionary.Key);
-
- foreach (IDictionaryItem dictionaryItem in foundDictionaryDescendants)
- {
- _localizationService.Delete(dictionaryItem, _backOfficeSecurityAccessor.BackOfficeSecurity?.CurrentUser?.Id ?? -1);
- }
-
- _localizationService.Delete(foundDictionary, _backOfficeSecurityAccessor.BackOfficeSecurity?.CurrentUser?.Id ?? -1);
-
- return await Task.FromResult(Ok());
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/DictionaryControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/DictionaryControllerBase.cs
deleted file mode 100644
index 4914298d14..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/DictionaryControllerBase.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Dictionary;
-
-[ApiController]
-[VersionedApiBackOfficeRoute("dictionary")]
-[ApiExplorerSettings(GroupName = "Dictionary")]
-[ApiVersion("1.0")]
-// TODO: Add authentication
-public abstract class DictionaryControllerBase : ManagementApiControllerBase
-{
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/ExportDictionaryController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/ExportDictionaryController.cs
deleted file mode 100644
index 1b0236af93..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/ExportDictionaryController.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using System.Net.Mime;
-using System.Text;
-using System.Xml.Linq;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Extensions;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Dictionary;
-
-public class ExportDictionaryController : DictionaryControllerBase
-{
- private readonly ILocalizationService _localizationService;
- private readonly IEntityXmlSerializer _entityXmlSerializer;
-
- public ExportDictionaryController(ILocalizationService localizationService, IEntityXmlSerializer entityXmlSerializer)
- {
- _localizationService = localizationService;
- _entityXmlSerializer = entityXmlSerializer;
- }
-
- [HttpGet("export/{key:guid}")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(FileContentResult), StatusCodes.Status200OK)]
- [ProducesResponseType(typeof(NotFoundResult), StatusCodes.Status404NotFound)]
- public async Task ExportDictionary(Guid key, bool includeChildren = false)
- {
- IDictionaryItem? dictionaryItem = _localizationService.GetDictionaryItemById(key);
- if (dictionaryItem is null)
- {
- return await Task.FromResult(NotFound());
- }
-
- XElement xml = _entityXmlSerializer.Serialize(dictionaryItem, includeChildren);
-
- var fileName = $"{dictionaryItem.ItemKey}.udt";
-
- // Set custom header so umbRequestHelper.downloadFile can save the correct filename
- HttpContext.Response.Headers.Add("x-filename", fileName);
-
- return await Task.FromResult(File(Encoding.UTF8.GetBytes(xml.ToDataString()), MediaTypeNames.Application.Octet, fileName));
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/ImportDictionaryController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/ImportDictionaryController.cs
deleted file mode 100644
index ef1cf4a24f..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/ImportDictionaryController.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-using System.Net.Mime;
-using System.Text;
-using Microsoft.AspNetCore.Hosting;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core;
-using Umbraco.Cms.Core.Extensions;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.Services;
-using IHostingEnvironment = Umbraco.Cms.Core.Hosting.IHostingEnvironment;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Dictionary;
-
-public class ImportDictionaryController : DictionaryControllerBase
-{
- private readonly IDictionaryService _dictionaryService;
- private readonly IWebHostEnvironment _webHostEnvironment;
- private readonly ILoadDictionaryItemService _loadDictionaryItemService;
-
- public ImportDictionaryController(
- IDictionaryService dictionaryService,
- IWebHostEnvironment webHostEnvironment,
- ILoadDictionaryItemService loadDictionaryItemService)
- {
- _dictionaryService = dictionaryService;
- _webHostEnvironment = webHostEnvironment;
- _loadDictionaryItemService = loadDictionaryItemService;
- }
-
- [HttpPost("import")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(ContentResult), StatusCodes.Status200OK)]
- [ProducesResponseType(typeof(NotFoundResult), StatusCodes.Status404NotFound)]
- public async Task ImportDictionary(string file, int? parentId)
- {
- if (string.IsNullOrWhiteSpace(file))
- {
- return NotFound();
- }
-
- var filePath = Path.Combine(_webHostEnvironment.MapPathContentRoot(Constants.SystemDirectories.Data), file);
- if (_webHostEnvironment.ContentRootFileProvider.GetFileInfo(filePath) is null)
- {
- return await Task.FromResult(NotFound());
- }
-
- IDictionaryItem dictionaryItem = _loadDictionaryItemService.Load(filePath, parentId);
-
- return await Task.FromResult(Content(_dictionaryService.CalculatePath(dictionaryItem.ParentId, dictionaryItem.Id), MediaTypeNames.Text.Plain, Encoding.UTF8));
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/Tree/ChildrenDictionaryTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/Tree/ChildrenDictionaryTreeController.cs
deleted file mode 100644
index 8dfa33835f..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/Tree/ChildrenDictionaryTreeController.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.Services.Paging;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Dictionary.Tree;
-
-public class ChildrenDictionaryTreeController : DictionaryTreeControllerBase
-{
- public ChildrenDictionaryTreeController(IEntityService entityService, ILocalizationService localizationService)
- : base(entityService, localizationService)
- {
- }
-
- [HttpGet("children")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Children(Guid parentKey, int skip = 0, int take = 100)
- {
- if (PaginationService.ConvertSkipTakeToPaging(skip, take, out var pageNumber, out var pageSize, out ProblemDetails? error) == false)
- {
- return BadRequest(error);
- }
-
- IDictionaryItem[] dictionaryItems = PaginatedDictionaryItems(
- pageNumber,
- pageSize,
- LocalizationService.GetDictionaryItemChildren(parentKey),
- out var totalItems);
-
- EntityTreeItemViewModel[] viewModels = MapTreeItemViewModels(null, dictionaryItems);
-
- PagedViewModel result = PagedViewModel(viewModels, totalItems);
- return await Task.FromResult(Ok(result));
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/Tree/DictionaryTreeControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/Tree/DictionaryTreeControllerBase.cs
deleted file mode 100644
index 87fdd2bdde..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/Tree/DictionaryTreeControllerBase.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.Controllers.Tree;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Dictionary.Tree;
-
-[ApiVersion("1.0")]
-[ApiController]
-[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Tree}/dictionary")]
-[ApiExplorerSettings(GroupName = "Dictionary")]
-// NOTE: at the moment dictionary items (renamed to dictionary tree) aren't supported by EntityService, so we have little use of the
-// tree controller base. We'll keep it though, in the hope that we can mend EntityService.
-public class DictionaryTreeControllerBase : EntityTreeControllerBase
-{
- public DictionaryTreeControllerBase(IEntityService entityService, ILocalizationService localizationService)
- : base(entityService) =>
- LocalizationService = localizationService;
-
- // dictionary items do not currently have a known UmbracoObjectType, so we'll settle with Unknown for now
- protected override UmbracoObjectTypes ItemObjectType => UmbracoObjectTypes.Unknown;
-
- protected ILocalizationService LocalizationService { get; }
-
- protected EntityTreeItemViewModel[] MapTreeItemViewModels(Guid? parentKey, IDictionaryItem[] dictionaryItems)
- => dictionaryItems.Select(dictionaryItem => new EntityTreeItemViewModel
- {
- Icon = Constants.Icons.RelationType,
- Name = dictionaryItem.ItemKey,
- Key = dictionaryItem.Key,
- Type = Constants.UdiEntityType.DictionaryItem,
- HasChildren = false,
- IsContainer = LocalizationService.GetDictionaryItemChildren(dictionaryItem.Key).Any(),
- ParentKey = parentKey
- }).ToArray();
-
- // localization service does not (yet) allow pagination of dictionary items, we have to do it in memory for now
- protected IDictionaryItem[] PaginatedDictionaryItems(long pageNumber, int pageSize, IEnumerable allDictionaryItems, out long totalItems)
- {
- IDictionaryItem[] allDictionaryItemsAsArray = allDictionaryItems.ToArray();
-
- totalItems = allDictionaryItemsAsArray.Length;
- return allDictionaryItemsAsArray
- .OrderBy(item => item.ItemKey)
- .Skip((int)pageNumber * pageSize)
- .Take(pageSize)
- .ToArray();
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/Tree/ItemsDictionaryTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/Tree/ItemsDictionaryTreeController.cs
deleted file mode 100644
index c74cf8f340..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/Tree/ItemsDictionaryTreeController.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Dictionary.Tree;
-
-public class ItemsDictionaryTreeController : DictionaryTreeControllerBase
-{
- public ItemsDictionaryTreeController(IEntityService entityService, ILocalizationService localizationService)
- : base(entityService, localizationService)
- {
- }
-
- [HttpGet("item")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)]
- public async Task>> Items([FromQuery(Name = "key")] Guid[] keys)
- {
- IDictionaryItem[] dictionaryItems = LocalizationService.GetDictionaryItemsByIds(keys).ToArray();
-
- EntityTreeItemViewModel[] viewModels = MapTreeItemViewModels(null, dictionaryItems);
-
- return await Task.FromResult(Ok(viewModels));
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/Tree/RootDictionaryTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/Tree/RootDictionaryTreeController.cs
deleted file mode 100644
index bd2fc78418..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/Tree/RootDictionaryTreeController.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.Services.Paging;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Dictionary.Tree;
-
-public class RootDictionaryTreeController : DictionaryTreeControllerBase
-{
- public RootDictionaryTreeController(IEntityService entityService, ILocalizationService localizationService)
- : base(entityService, localizationService)
- {
- }
-
- [HttpGet("root")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Root(int skip = 0, int take = 100)
- {
- if (PaginationService.ConvertSkipTakeToPaging(skip, take, out var pageNumber, out var pageSize, out ProblemDetails? error) == false)
- {
- return BadRequest(error);
- }
-
- IDictionaryItem[] dictionaryItems = PaginatedDictionaryItems(
- pageNumber,
- pageSize,
- LocalizationService.GetRootDictionaryItems(),
- out var totalItems);
-
- EntityTreeItemViewModel[] viewModels = MapTreeItemViewModels(null, dictionaryItems);
-
- PagedViewModel result = PagedViewModel(viewModels, totalItems);
- return await Task.FromResult(Ok(result));
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/UpdateDictionaryController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/UpdateDictionaryController.cs
deleted file mode 100644
index efe2214733..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/UpdateDictionaryController.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-using System.Net.Mime;
-using System.Text;
-using System.Text.Json;
-using Json.Patch;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Mapping;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.Serialization;
-using Umbraco.Cms.Api.Management.Services;
-using Umbraco.Cms.Api.Management.ViewModels.Dictionary;
-using Umbraco.Cms.Api.Management.ViewModels.JsonPatch;
-using Umbraco.New.Cms.Core.Factories;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Dictionary;
-
-public class UpdateDictionaryController : DictionaryControllerBase
-{
- private readonly ILocalizationService _localizationService;
- private readonly IUmbracoMapper _umbracoMapper;
- private readonly IDictionaryService _dictionaryService;
- private readonly IDictionaryFactory _dictionaryFactory;
- private readonly IJsonPatchService _jsonPatchService;
- private readonly ISystemTextJsonSerializer _systemTextJsonSerializer;
-
- public UpdateDictionaryController(
- ILocalizationService localizationService,
- IUmbracoMapper umbracoMapper,
- IDictionaryService dictionaryService,
- IDictionaryFactory dictionaryFactory,
- IJsonPatchService jsonPatchService,
- ISystemTextJsonSerializer systemTextJsonSerializer)
- {
- _localizationService = localizationService;
- _umbracoMapper = umbracoMapper;
- _dictionaryService = dictionaryService;
- _dictionaryFactory = dictionaryFactory;
- _jsonPatchService = jsonPatchService;
- _systemTextJsonSerializer = systemTextJsonSerializer;
- }
-
- [HttpPatch("{id:Guid}")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(ContentResult), StatusCodes.Status200OK)]
- [ProducesResponseType(typeof(NotFoundResult), StatusCodes.Status404NotFound)]
- public async Task Update(Guid id, JsonPatchViewModel[] updateViewModel)
- {
- IDictionaryItem? dictionaryItem = _localizationService.GetDictionaryItemById(id);
-
- if (dictionaryItem is null)
- {
- return NotFound();
- }
-
- DictionaryViewModel dictionaryToPatch = _umbracoMapper.Map(dictionaryItem)!;
-
- PatchResult? result = _jsonPatchService.Patch(updateViewModel, dictionaryToPatch);
-
- if (result?.Result is null)
- {
- throw new JsonException("Could not patch the JsonPatchViewModel");
- }
-
- DictionaryViewModel? updatedDictionaryItem = _systemTextJsonSerializer.Deserialize(result.Result.ToJsonString());
- if (updatedDictionaryItem is null)
- {
- throw new JsonException("Could not serialize from PatchResult to DictionaryViewModel");
- }
-
- IDictionaryItem dictionaryToSave = _dictionaryFactory.CreateDictionaryItem(updatedDictionaryItem!);
- _localizationService.Save(dictionaryToSave);
- return await Task.FromResult(Content(_dictionaryService.CalculatePath(dictionaryToSave.ParentId, dictionaryToSave.Id), MediaTypeNames.Text.Plain, Encoding.UTF8));
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/UploadDictionaryController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/UploadDictionaryController.cs
deleted file mode 100644
index 32156d21c0..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Dictionary/UploadDictionaryController.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-using System.Xml;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.Models;
-using Umbraco.Cms.Api.Management.Services;
-using Umbraco.Cms.Api.Management.ViewModels.Dictionary;
-using Umbraco.Extensions;
-using Umbraco.New.Cms.Core.Factories;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Dictionary;
-
-public class UploadDictionaryController : DictionaryControllerBase
-{
- private readonly ILocalizedTextService _localizedTextService;
- private readonly IUploadFileService _uploadFileService;
- private readonly IDictionaryFactory _dictionaryFactory;
-
- public UploadDictionaryController(ILocalizedTextService localizedTextService, IUploadFileService uploadFileService, IDictionaryFactory dictionaryFactory)
- {
- _localizedTextService = localizedTextService;
- _uploadFileService = uploadFileService;
- _dictionaryFactory = dictionaryFactory;
- }
-
- [HttpPost("upload")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(DictionaryImportViewModel), StatusCodes.Status200OK)]
- [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
- public async Task> Upload(IFormFile file)
- {
- FormFileUploadResult formFileUploadResult = _uploadFileService.TryLoad(file);
- if (formFileUploadResult.CouldLoad is false || formFileUploadResult.XmlDocument is null)
- {
- return await Task.FromResult(ValidationProblem(
- _localizedTextService.Localize("media", "failedFileUpload"),
- formFileUploadResult.ErrorMessage));
- }
-
- DictionaryImportViewModel model = _dictionaryFactory.CreateDictionaryImportViewModel(formFileUploadResult);
-
- if (!model.DictionaryItems.Any())
- {
- return ValidationProblem(
- _localizedTextService.Localize("media", "failedFileUpload"),
- _localizedTextService.Localize("dictionary", "noItemsInFile"));
- }
-
- return await Task.FromResult(model);
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Document/RecycleBin/ChildrenDocumentRecycleBinController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Document/RecycleBin/ChildrenDocumentRecycleBinController.cs
deleted file mode 100644
index 412b6e3306..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Document/RecycleBin/ChildrenDocumentRecycleBinController.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-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.ViewModels.RecycleBin;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Document.RecycleBin;
-
-public class ChildrenDocumentRecycleBinController : DocumentRecycleBinControllerBase
-{
- public ChildrenDocumentRecycleBinController(IEntityService entityService)
- : base(entityService)
- {
- }
-
- [HttpGet("children")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Children(Guid parentKey, int skip = 0, int take = 100)
- => await GetChildren(parentKey, skip, take);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Document/RecycleBin/DocumentRecycleBinControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Document/RecycleBin/DocumentRecycleBinControllerBase.cs
deleted file mode 100644
index 222aac35db..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Document/RecycleBin/DocumentRecycleBinControllerBase.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Models.Entities;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.Controllers.RecycleBin;
-using Umbraco.Cms.Api.Management.Filters;
-using Umbraco.Cms.Api.Management.ViewModels.RecycleBin;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Document.RecycleBin;
-
-[ApiVersion("1.0")]
-[ApiController]
-[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.RecycleBin}/{Constants.UdiEntityType.Document}")]
-[RequireDocumentTreeRootAccess]
-[ProducesResponseType(StatusCodes.Status401Unauthorized)]
-[ApiExplorerSettings(GroupName = nameof(Constants.UdiEntityType.Document))]
-public class DocumentRecycleBinControllerBase : RecycleBinControllerBase
-{
- public DocumentRecycleBinControllerBase(IEntityService entityService)
- : base(entityService)
- {
- }
-
- protected override UmbracoObjectTypes ItemObjectType => UmbracoObjectTypes.Document;
-
- protected override int RecycleBinRootId => Constants.System.RecycleBinContent;
-
- protected override RecycleBinItemViewModel MapRecycleBinViewModel(Guid? parentKey, IEntitySlim entity)
- {
- RecycleBinItemViewModel viewModel = base.MapRecycleBinViewModel(parentKey, entity);
-
- if (entity is IDocumentEntitySlim documentEntitySlim)
- {
- viewModel.Icon = documentEntitySlim.ContentTypeIcon ?? viewModel.Icon;
- }
-
- return viewModel;
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Document/RecycleBin/RootDocumentRecycleBinController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Document/RecycleBin/RootDocumentRecycleBinController.cs
deleted file mode 100644
index 2d8a4ef8d5..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Document/RecycleBin/RootDocumentRecycleBinController.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-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.ViewModels.RecycleBin;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Document.RecycleBin;
-
-public class RootDocumentRecycleBinController : DocumentRecycleBinControllerBase
-{
- public RootDocumentRecycleBinController(IEntityService entityService)
- : base(entityService)
- {
- }
-
- [HttpGet("root")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Root(int skip = 0, int take = 100)
- => await GetRoot(skip, take);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Document/Tree/ChildrenDocumentTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Document/Tree/ChildrenDocumentTreeController.cs
deleted file mode 100644
index 63361b2c67..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Document/Tree/ChildrenDocumentTreeController.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Cache;
-using Umbraco.Cms.Core.Security;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.Services.Entities;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Document.Tree;
-
-public class ChildrenDocumentTreeController : DocumentTreeControllerBase
-{
- public ChildrenDocumentTreeController(
- IEntityService entityService,
- IUserStartNodeEntitiesService userStartNodeEntitiesService,
- IDataTypeService dataTypeService,
- IPublicAccessService publicAccessService,
- AppCaches appCaches,
- IBackOfficeSecurityAccessor backofficeSecurityAccessor)
- : base(entityService, userStartNodeEntitiesService, dataTypeService, publicAccessService, appCaches, backofficeSecurityAccessor)
- {
- }
-
- [HttpGet("children")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Children(Guid parentKey, int skip = 0, int take = 100, Guid? dataTypeKey = null, string? culture = null)
- {
- IgnoreUserStartNodesForDataType(dataTypeKey);
- RenderForClientCulture(culture);
- return await GetChildren(parentKey, skip, take);
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Document/Tree/DocumentTreeControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Document/Tree/DocumentTreeControllerBase.cs
deleted file mode 100644
index 2b8463de26..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Document/Tree/DocumentTreeControllerBase.cs
+++ /dev/null
@@ -1,93 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core;
-using Umbraco.Cms.Core.Cache;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Models.Entities;
-using Umbraco.Cms.Core.Security;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.Controllers.Tree;
-using Umbraco.Cms.Api.Management.Services.Entities;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-using Umbraco.Extensions;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Document.Tree;
-
-[ApiVersion("1.0")]
-[ApiController]
-[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Tree}/{Constants.UdiEntityType.Document}")]
-[ApiExplorerSettings(GroupName = nameof(Constants.UdiEntityType.Document))]
-public abstract class DocumentTreeControllerBase : UserStartNodeTreeControllerBase
-{
- private readonly IPublicAccessService _publicAccessService;
- private readonly AppCaches _appCaches;
- private readonly IBackOfficeSecurityAccessor _backofficeSecurityAccessor;
- private string? _culture;
-
- protected DocumentTreeControllerBase(
- IEntityService entityService,
- IUserStartNodeEntitiesService userStartNodeEntitiesService,
- IDataTypeService dataTypeService,
- IPublicAccessService publicAccessService,
- AppCaches appCaches,
- IBackOfficeSecurityAccessor backofficeSecurityAccessor)
- : base(entityService, userStartNodeEntitiesService, dataTypeService)
- {
- _publicAccessService = publicAccessService;
- _appCaches = appCaches;
- _backofficeSecurityAccessor = backofficeSecurityAccessor;
- }
-
- protected override UmbracoObjectTypes ItemObjectType => UmbracoObjectTypes.Document;
-
- protected override Ordering ItemOrdering => Ordering.By(nameof(Infrastructure.Persistence.Dtos.NodeDto.SortOrder));
-
- protected void RenderForClientCulture(string? culture) => _culture = culture;
-
- protected override DocumentTreeItemViewModel MapTreeItemViewModel(Guid? parentKey, IEntitySlim entity)
- {
- DocumentTreeItemViewModel viewModel = base.MapTreeItemViewModel(parentKey, entity);
-
- if (entity is IDocumentEntitySlim documentEntitySlim)
- {
- viewModel.IsPublished = documentEntitySlim.Published;
- viewModel.IsEdited = documentEntitySlim.Edited;
- viewModel.Icon = documentEntitySlim.ContentTypeIcon ?? viewModel.Icon;
- viewModel.IsProtected = _publicAccessService.IsProtected(entity.Path);
-
- if (_culture != null && documentEntitySlim.Variations.VariesByCulture())
- {
- viewModel.Name = documentEntitySlim.CultureNames.TryGetValue(_culture, out var cultureName)
- ? cultureName
- : $"({viewModel.Name})";
-
- viewModel.IsPublished = documentEntitySlim.PublishedCultures.Contains(_culture);
- viewModel.IsEdited = documentEntitySlim.EditedCultures.Contains(_culture);
- }
-
- viewModel.IsEdited &= viewModel.IsPublished;
- }
-
- return viewModel;
- }
-
- // TODO: delete these (faking start node setup for unlimited editor)
- protected override int[] GetUserStartNodeIds() => new[] { -1 };
-
- protected override string[] GetUserStartNodePaths() => Array.Empty();
-
- // TODO: use these implementations instead of the dummy ones above once we have backoffice auth in place
- // protected override int[] GetUserStartNodeIds()
- // => _backofficeSecurityAccessor
- // .BackOfficeSecurity?
- // .CurrentUser?
- // .CalculateContentStartNodeIds(EntityService, _appCaches)
- // ?? Array.Empty();
- //
- // protected override string[] GetUserStartNodePaths()
- // => _backofficeSecurityAccessor
- // .BackOfficeSecurity?
- // .CurrentUser?
- // .GetContentStartNodePaths(EntityService, _appCaches)
- // ?? Array.Empty();
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Document/Tree/ItemsDocumentTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Document/Tree/ItemsDocumentTreeController.cs
deleted file mode 100644
index 22fe695c36..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Document/Tree/ItemsDocumentTreeController.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Cache;
-using Umbraco.Cms.Core.Security;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.Services.Entities;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Document.Tree;
-
-public class ItemsDocumentTreeController : DocumentTreeControllerBase
-{
- public ItemsDocumentTreeController(
- IEntityService entityService,
- IUserStartNodeEntitiesService userStartNodeEntitiesService,
- IDataTypeService dataTypeService,
- IPublicAccessService publicAccessService,
- AppCaches appCaches,
- IBackOfficeSecurityAccessor backofficeSecurityAccessor)
- : base(entityService, userStartNodeEntitiesService, dataTypeService, publicAccessService, appCaches, backofficeSecurityAccessor)
- {
- }
-
- [HttpGet("item")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)]
- public async Task>> Items([FromQuery(Name = "key")] Guid[] keys, Guid? dataTypeKey = null, string? culture = null)
- {
- IgnoreUserStartNodesForDataType(dataTypeKey);
- RenderForClientCulture(culture);
- return await GetItems(keys);
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Document/Tree/RootDocumentTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Document/Tree/RootDocumentTreeController.cs
deleted file mode 100644
index dfe51475a8..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Document/Tree/RootDocumentTreeController.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Cache;
-using Umbraco.Cms.Core.Security;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.Services.Entities;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Document.Tree;
-
-public class RootDocumentTreeController : DocumentTreeControllerBase
-{
- public RootDocumentTreeController(
- IEntityService entityService,
- IUserStartNodeEntitiesService userStartNodeEntitiesService,
- IDataTypeService dataTypeService,
- IPublicAccessService publicAccessService,
- AppCaches appCaches,
- IBackOfficeSecurityAccessor backofficeSecurityAccessor)
- : base(entityService, userStartNodeEntitiesService, dataTypeService, publicAccessService, appCaches, backofficeSecurityAccessor)
- {
- }
-
- [HttpGet("root")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Root(int skip = 0, int take = 100, Guid? dataTypeKey = null, string? culture = null)
- {
- IgnoreUserStartNodesForDataType(dataTypeKey);
- RenderForClientCulture(culture);
- return await GetRoot(skip, take);
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Tree/DocumentBlueprintTreeControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Tree/DocumentBlueprintTreeControllerBase.cs
deleted file mode 100644
index cd43bb8d4f..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Tree/DocumentBlueprintTreeControllerBase.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core;
-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.ViewModels.Tree;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.DocumentBlueprint.Tree;
-
-[ApiVersion("1.0")]
-[ApiController]
-[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Tree}/{Constants.UdiEntityType.DocumentBlueprint}")]
-[ApiExplorerSettings(GroupName = "Document Blueprint")]
-public class DocumentBlueprintTreeControllerBase : EntityTreeControllerBase
-{
- private readonly IContentTypeService _contentTypeService;
-
- public DocumentBlueprintTreeControllerBase(IEntityService entityService, IContentTypeService contentTypeService)
- : base(entityService) =>
- _contentTypeService = contentTypeService;
-
- protected override UmbracoObjectTypes ItemObjectType => UmbracoObjectTypes.DocumentBlueprint;
-
- protected override DocumentBlueprintTreeItemViewModel[] MapTreeItemViewModels(Guid? parentKey, IEntitySlim[] entities)
- {
- var contentTypeAliases = 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 =>
- {
- DocumentBlueprintTreeItemViewModel viewModel = base.MapTreeItemViewModel(parentKey, entity);
- viewModel.Icon = Constants.Icons.Blueprint;
- viewModel.HasChildren = false;
-
- if (entity is IDocumentEntitySlim documentEntitySlim
- && contentTypeByAlias.TryGetValue(documentEntitySlim.ContentTypeAlias, out IContentType? contentType))
- {
- viewModel.DocumentTypeKey = contentType.Key;
- viewModel.DocumentTypeAlias = contentType.Alias;
- viewModel.DocumentTypeName = contentType.Name;
- }
-
- return viewModel;
- }).ToArray();
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Tree/ItemsDocumentBlueprintTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Tree/ItemsDocumentBlueprintTreeController.cs
deleted file mode 100644
index 0b9daed9c0..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Tree/ItemsDocumentBlueprintTreeController.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-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.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.DocumentBlueprint.Tree;
-
-public class ItemsDocumentBlueprintTreeController : DocumentBlueprintTreeControllerBase
-{
- public ItemsDocumentBlueprintTreeController(IEntityService entityService, IContentTypeService contentTypeService)
- : base(entityService, contentTypeService)
- {
- }
-
- [HttpGet("item")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)]
- public async Task>> Items([FromQuery(Name = "key")] Guid[] keys)
- => await GetItems(keys);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Tree/RootDocumentBlueprintTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Tree/RootDocumentBlueprintTreeController.cs
deleted file mode 100644
index 9df4a53723..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Tree/RootDocumentBlueprintTreeController.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-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.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.DocumentBlueprint.Tree;
-
-public class RootDocumentBlueprintTreeController : DocumentBlueprintTreeControllerBase
-{
- public RootDocumentBlueprintTreeController(IEntityService entityService, IContentTypeService contentTypeService)
- : base(entityService, contentTypeService)
- {
- }
-
- [HttpGet("root")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Root(int skip = 0, int take = 100)
- => await GetRoot(skip, take);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/DocumentType/Tree/ChildrenDocumentTypeTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/DocumentType/Tree/ChildrenDocumentTypeTreeController.cs
deleted file mode 100644
index f9e3971fa5..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/DocumentType/Tree/ChildrenDocumentTypeTreeController.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-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.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.DocumentType.Tree;
-
-public class ChildrenDocumentTypeTreeController : DocumentTypeTreeControllerBase
-{
- public ChildrenDocumentTypeTreeController(IEntityService entityService, IContentTypeService contentTypeService)
- : base(entityService, contentTypeService)
- {
- }
-
- [HttpGet("children")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Children(Guid parentKey, int skip = 0, int take = 100, bool foldersOnly = false)
- {
- RenderFoldersOnly(foldersOnly);
- return await GetChildren(parentKey, skip, take);
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/DocumentType/Tree/DocumentTypeTreeControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/DocumentType/Tree/DocumentTypeTreeControllerBase.cs
deleted file mode 100644
index d0a0d27143..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/DocumentType/Tree/DocumentTypeTreeControllerBase.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core;
-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.ViewModels.Tree;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.DocumentType.Tree;
-
-[ApiVersion("1.0")]
-[ApiController]
-[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Tree}/{Constants.UdiEntityType.DocumentType}")]
-[ApiExplorerSettings(GroupName = "Document Type")]
-public class DocumentTypeTreeControllerBase : FolderTreeControllerBase
-{
- private readonly IContentTypeService _contentTypeService;
-
- public DocumentTypeTreeControllerBase(IEntityService entityService, IContentTypeService contentTypeService)
- : base(entityService) =>
- _contentTypeService = contentTypeService;
-
- protected override UmbracoObjectTypes ItemObjectType => UmbracoObjectTypes.DocumentType;
-
- protected override UmbracoObjectTypes FolderObjectType => UmbracoObjectTypes.DocumentTypeContainer;
-
- protected override DocumentTypeTreeItemViewModel[] MapTreeItemViewModels(Guid? parentKey, IEntitySlim[] entities)
- {
- var contentTypes = _contentTypeService
- .GetAll(entities.Select(entity => entity.Id).ToArray())
- .ToDictionary(contentType => contentType.Id);
-
- return entities.Select(entity =>
- {
- DocumentTypeTreeItemViewModel viewModel = MapTreeItemViewModel(parentKey, entity);
- if (contentTypes.TryGetValue(entity.Id, out IContentType? contentType))
- {
- viewModel.Icon = contentType.Icon ?? viewModel.Icon;
- viewModel.IsElement = contentType.IsElement;
- }
-
- return viewModel;
- }).ToArray();
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/DocumentType/Tree/ItemsDocumentTypeTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/DocumentType/Tree/ItemsDocumentTypeTreeController.cs
deleted file mode 100644
index 411e5f7446..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/DocumentType/Tree/ItemsDocumentTypeTreeController.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.DocumentType.Tree;
-
-public class ItemsDocumentTypeTreeController : DocumentTypeTreeControllerBase
-{
- public ItemsDocumentTypeTreeController(IEntityService entityService, IContentTypeService contentTypeService)
- : base(entityService, contentTypeService)
- {
- }
-
- [HttpGet("item")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)]
- public async Task>> Items([FromQuery(Name = "key")] Guid[] keys)
- => await GetItems(keys);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/DocumentType/Tree/RootDocumentTypeTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/DocumentType/Tree/RootDocumentTypeTreeController.cs
deleted file mode 100644
index 23ba9ebc73..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/DocumentType/Tree/RootDocumentTypeTreeController.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-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.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.DocumentType.Tree;
-
-public class RootDocumentTypeTreeController : DocumentTypeTreeControllerBase
-{
- public RootDocumentTypeTreeController(IEntityService entityService, IContentTypeService contentTypeService)
- : base(entityService, contentTypeService)
- {
- }
-
- [HttpGet("root")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Root(int skip = 0, int take = 100, bool foldersOnly = false)
- {
- RenderFoldersOnly(foldersOnly);
- return await GetRoot(skip, take);
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/ExecuteActionHealthCheckController.cs b/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/ExecuteActionHealthCheckController.cs
deleted file mode 100644
index bdfef7dc39..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/ExecuteActionHealthCheckController.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.Options;
-using Umbraco.Cms.Api.Management.ViewModels.HealthCheck;
-using Umbraco.Cms.Core.Configuration.Models;
-using Umbraco.Cms.Core.HealthChecks;
-using Umbraco.Cms.Core.Mapping;
-
-namespace Umbraco.Cms.Api.Management.Controllers.HealthCheck;
-
-public class ExecuteActionHealthCheckController : HealthCheckControllerBase
-{
- private readonly HealthCheckCollection _healthChecks;
- private readonly IUmbracoMapper _umbracoMapper;
- private readonly IList _disabledCheckIds;
-
- public ExecuteActionHealthCheckController(
- HealthCheckCollection healthChecks,
- IOptions healthChecksSettings,
- IUmbracoMapper umbracoMapper)
- {
- _healthChecks = healthChecks;
- _disabledCheckIds = healthChecksSettings.Value
- .DisabledChecks
- .Select(x => x.Id)
- .ToList();
- _umbracoMapper = umbracoMapper;
- }
-
- ///
- /// Executes a given action from a HealthCheck.
- ///
- /// The action to be executed.
- /// The result of a health check after the health check action is performed.
- [HttpPost("execute-action")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
- [ProducesResponseType(typeof(HealthCheckResultViewModel), StatusCodes.Status200OK)]
- public async Task> ExecuteAction(HealthCheckActionViewModel action)
- {
- Guid healthCheckKey = action.HealthCheckKey;
-
- Core.HealthChecks.HealthCheck? healthCheck = _healthChecks
- .Where(x => _disabledCheckIds.Contains(healthCheckKey) == false)
- .FirstOrDefault(x => x.Id == healthCheckKey);
-
- if (healthCheck is null)
- {
- var invalidModelProblem = new ProblemDetails
- {
- Title = "Health Check Not Found",
- Detail = $"No health check found with key = {healthCheckKey}",
- Status = StatusCodes.Status400BadRequest,
- Type = "Error",
- };
-
- return await Task.FromResult(BadRequest(invalidModelProblem));
- }
-
- HealthCheckStatus result = healthCheck.ExecuteAction(_umbracoMapper.Map(action)!);
-
- return await Task.FromResult(Ok(_umbracoMapper.Map(result)));
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/Group/AllHealthCheckGroupController.cs b/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/Group/AllHealthCheckGroupController.cs
deleted file mode 100644
index a4f8d91c4c..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/Group/AllHealthCheckGroupController.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-using Umbraco.Cms.Api.Management.Factories;
-using Umbraco.Cms.Api.Management.ViewModels.HealthCheck;
-using Umbraco.Cms.Core.HealthChecks;
-using Umbraco.Cms.Core.Mapping;
-
-namespace Umbraco.Cms.Api.Management.Controllers.HealthCheck.Group;
-
-public class AllHealthCheckGroupController : HealthCheckGroupControllerBase
-{
- private readonly HealthCheckCollection _healthChecks;
- private readonly IHealthCheckGroupWithResultViewModelFactory _healthCheckGroupWithResultViewModelFactory;
- private readonly IUmbracoMapper _umbracoMapper;
-
- public AllHealthCheckGroupController(
- HealthCheckCollection healthChecks,
- IHealthCheckGroupWithResultViewModelFactory healthCheckGroupWithResultViewModelFactory,
- IUmbracoMapper umbracoMapper)
- {
- _healthChecks = healthChecks;
- _healthCheckGroupWithResultViewModelFactory = healthCheckGroupWithResultViewModelFactory;
- _umbracoMapper = umbracoMapper;
- }
-
- ///
- /// Gets a paginated grouped list of all health checks without checking the result of each health check.
- ///
- /// The amount of items to skip.
- /// The amount of items to take.
- /// The paged result of health checks, grouped by health check group name.
- [HttpGet]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> All(int skip = 0, int take = 100)
- {
- IEnumerable> groups = _healthCheckGroupWithResultViewModelFactory
- .CreateGroupingFromHealthCheckCollection(_healthChecks)
- .Skip(skip)
- .Take(take);
-
- return await Task.FromResult(Ok(_umbracoMapper.Map>(groups)));
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/Group/ByNameWithResultHealthCheckGroupController.cs b/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/Group/ByNameWithResultHealthCheckGroupController.cs
deleted file mode 100644
index 14965ea926..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/Group/ByNameWithResultHealthCheckGroupController.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Api.Management.Factories;
-using Umbraco.Cms.Api.Management.ViewModels.HealthCheck;
-using Umbraco.Cms.Core.HealthChecks;
-using Umbraco.Extensions;
-
-namespace Umbraco.Cms.Api.Management.Controllers.HealthCheck.Group;
-
-public class ByNameWithResultHealthCheckGroupController : HealthCheckGroupControllerBase
-{
- private readonly HealthCheckCollection _healthChecks;
- private readonly IHealthCheckGroupWithResultViewModelFactory _healthCheckGroupWithResultViewModelFactory;
-
- public ByNameWithResultHealthCheckGroupController(
- HealthCheckCollection healthChecks,
- IHealthCheckGroupWithResultViewModelFactory healthCheckGroupWithResultViewModelFactory)
- {
- _healthChecks = healthChecks;
- _healthCheckGroupWithResultViewModelFactory = healthCheckGroupWithResultViewModelFactory;
- }
-
- ///
- /// Gets a health check group with all its health checks by a group name.
- ///
- /// The name of the group.
- /// The health check result(s) will be included as part of the health checks.
- /// The health check group or not found result.
- [HttpGet("{name}")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(NotFoundResult), StatusCodes.Status404NotFound)]
- [ProducesResponseType(typeof(HealthCheckGroupWithResultViewModel), StatusCodes.Status200OK)]
- public async Task> ByName(string name)
- {
- IEnumerable> groups = _healthCheckGroupWithResultViewModelFactory
- .CreateGroupingFromHealthCheckCollection(_healthChecks);
-
- IGrouping? group = groups.FirstOrDefault(x => x.Key.InvariantEquals(name.Trim()));
-
- if (group is null)
- {
- return await Task.FromResult(NotFound());
- }
-
- return await Task.FromResult(Ok(_healthCheckGroupWithResultViewModelFactory.CreateHealthCheckGroupWithResultViewModel(group)));
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/Group/HealthCheckGroupControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/Group/HealthCheckGroupControllerBase.cs
deleted file mode 100644
index 06731d32e1..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/Group/HealthCheckGroupControllerBase.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Api.Management.Routing;
-using Constants = Umbraco.Cms.Core.Constants;
-
-namespace Umbraco.Cms.Api.Management.Controllers.HealthCheck.Group;
-
-[ApiController]
-[VersionedApiBackOfficeRoute($"{Constants.HealthChecks.RoutePath.HealthCheck}-group")]
-[ApiExplorerSettings(GroupName = "Health Check")]
-[ApiVersion("1.0")]
-public abstract class HealthCheckGroupControllerBase : ManagementApiControllerBase
-{
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/HealthCheckControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/HealthCheckControllerBase.cs
deleted file mode 100644
index c5681f3323..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/HealthCheckControllerBase.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Api.Management.Routing;
-using Constants = Umbraco.Cms.Core.Constants;
-
-namespace Umbraco.Cms.Api.Management.Controllers.HealthCheck;
-
-[ApiController]
-[VersionedApiBackOfficeRoute($"{Constants.HealthChecks.RoutePath.HealthCheck}")]
-[ApiExplorerSettings(GroupName = "Health Check")]
-[ApiVersion("1.0")]
-public abstract class HealthCheckControllerBase : ManagementApiControllerBase
-{
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Help/GetHelpController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Help/GetHelpController.cs
deleted file mode 100644
index 1db67b14f7..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Help/GetHelpController.cs
+++ /dev/null
@@ -1,80 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.Logging;
-using Microsoft.Extensions.Options;
-using Umbraco.Cms.Core.Configuration.Models;
-using Umbraco.Cms.Core.Serialization;
-using Umbraco.Cms.Api.Common.Builders;
-using Umbraco.Cms.Api.Management.Factories;
-using Umbraco.Cms.Api.Management.ViewModels.Help;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Help;
-
-public class GetHelpController : HelpControllerBase
-{
- private readonly ILogger _logger;
- private readonly IJsonSerializer _jsonSerializer;
- private HelpPageSettings _helpPageSettings;
-
- public GetHelpController(
- IOptionsMonitor helpPageSettings,
- ILogger logger,
- IJsonSerializer jsonSerializer)
- {
- _logger = logger;
- _jsonSerializer = jsonSerializer;
- _helpPageSettings = helpPageSettings.CurrentValue;
- helpPageSettings.OnChange(UpdateHelpPageSettings);
- }
-
- private void UpdateHelpPageSettings(HelpPageSettings settings) => _helpPageSettings = settings;
-
- [HttpGet]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task Get(string section, string? tree, int skip, int take, string? baseUrl = "https://our.umbraco.com")
- {
- if (IsAllowedUrl(baseUrl) is false)
- {
- _logger.LogError($"The following URL is not listed in the allowlist for HelpPage in HelpPageSettings: {baseUrl}");
-
- ProblemDetails invalidModelProblem =
- new ProblemDetailsBuilder()
- .WithTitle("Invalid database configuration")
- .WithDetail("The provided database configuration is invalid")
- .Build();
-
- return BadRequest(invalidModelProblem);
- }
-
- var url = string.Format(baseUrl + "/Umbraco/Documentation/Lessons/GetContextHelpDocs?sectionAlias={0}&treeAlias={1}", section, tree);
-
- try
- {
- var httpClient = new HttpClient();
-
- // fetch dashboard json and parse to JObject
- var json = await httpClient.GetStringAsync(url);
- List? result = _jsonSerializer.Deserialize>(json);
- if (result != null)
- {
- return Ok(new PagedViewModel
- {
- Total = result.Count,
- Items = result.Skip(skip).Take(take),
- });
- }
- }
- catch (HttpRequestException rex)
- {
- _logger.LogInformation($"Check your network connection, exception: {rex.Message}");
- }
-
- return Ok(PagedViewModel.Empty());
- }
-
- private bool IsAllowedUrl(string? url) =>
- _helpPageSettings.HelpPageUrlAllowList is null || _helpPageSettings.HelpPageUrlAllowList.Contains(url);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Help/HelpControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Help/HelpControllerBase.cs
deleted file mode 100644
index f09e424a31..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Help/HelpControllerBase.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Help;
-
-[ApiController]
-[VersionedApiBackOfficeRoute("help")]
-[ApiExplorerSettings(GroupName = "Help")]
-[ApiVersion("1.0")]
-public abstract class HelpControllerBase : ManagementApiControllerBase
-{
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Indexer/AllIndexerController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Indexer/AllIndexerController.cs
deleted file mode 100644
index 9e62a225ff..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Indexer/AllIndexerController.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-using Examine;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Api.Management.Factories;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-using Umbraco.Cms.Api.Management.ViewModels.Search;
-using Umbraco.Extensions;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Indexer;
-
-[ApiVersion("1.0")]
-public class AllIndexerController : IndexerControllerBase
-{
- private readonly IExamineManager _examineManager;
- private readonly IIndexViewModelFactory _indexViewModelFactory;
-
- public AllIndexerController(
- IExamineManager examineManager,
- IIndexViewModelFactory indexViewModelFactory)
- {
- _examineManager = examineManager;
- _indexViewModelFactory = indexViewModelFactory;
- }
-
- ///
- /// Get the details for indexers
- ///
- ///
- [HttpGet]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public Task> All(int skip, int take)
- {
- IndexViewModel[] indexes = _examineManager.Indexes
- .Select(_indexViewModelFactory.Create)
- .OrderBy(indexModel => indexModel.Name.TrimEnd("Indexer")).ToArray();
-
- var viewModel = new PagedViewModel { Items = indexes.Skip(skip).Take(take), Total = indexes.Length };
- return Task.FromResult(viewModel);
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Indexer/DetailsIndexerController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Indexer/DetailsIndexerController.cs
deleted file mode 100644
index 7275993fd2..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Indexer/DetailsIndexerController.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-using Examine;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Api.Management.Factories;
-using Umbraco.Cms.Api.Management.ViewModels.Search;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Indexer;
-
-[ApiVersion("1.0")]
-public class DetailsIndexerController : IndexerControllerBase
-{
- private readonly IIndexViewModelFactory _indexViewModelFactory;
- private readonly IExamineManager _examineManager;
-
- public DetailsIndexerController(
- IIndexViewModelFactory indexViewModelFactory,
- IExamineManager examineManager)
- {
- _indexViewModelFactory = indexViewModelFactory;
- _examineManager = examineManager;
- }
-
- ///
- /// Check if the index has been rebuilt
- ///
- ///
- ///
- ///
- /// This is kind of rudimentary since there's no way we can know that the index has rebuilt, we
- /// have a listener for the index op complete so we'll just check if that key is no longer there in the runtime cache
- ///
- [HttpGet("{indexName}")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
- [ProducesResponseType(typeof(IndexViewModel), StatusCodes.Status200OK)]
- public async Task> Details(string indexName)
- {
- if (_examineManager.TryGetIndex(indexName, out IIndex? index))
- {
- return await Task.FromResult(_indexViewModelFactory.Create(index!));
- }
-
- var invalidModelProblem = new ProblemDetails
- {
- Title = "Index Not Found",
- Detail = $"No index found with name = {indexName}",
- Status = StatusCodes.Status400BadRequest,
- Type = "Error",
- };
-
- return await Task.FromResult(BadRequest(invalidModelProblem));
-
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Indexer/IndexerControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Indexer/IndexerControllerBase.cs
deleted file mode 100644
index 7d41b6c2ef..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Indexer/IndexerControllerBase.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Indexer;
-
-[ApiController]
-[VersionedApiBackOfficeRoute("indexer")]
-[ApiExplorerSettings(GroupName = "Indexer")]
-public class IndexerControllerBase : ManagementApiControllerBase
-{
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Indexer/RebuildIndexerController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Indexer/RebuildIndexerController.cs
deleted file mode 100644
index 4d2b51fd87..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Indexer/RebuildIndexerController.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-using Examine;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.Logging;
-using Umbraco.Cms.Infrastructure.Examine;
-using Umbraco.New.Cms.Infrastructure.Services;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Indexer;
-
-[ApiVersion("1.0")]
-public class RebuildIndexerController : IndexerControllerBase
-{
- private readonly ILogger _logger;
- private readonly IIndexingRebuilderService _indexingRebuilderService;
- private readonly IExamineManager _examineManager;
-
- public RebuildIndexerController(
- ILogger logger,
- IIndexingRebuilderService indexingRebuilderService,
- IExamineManager examineManager)
- {
- _logger = logger;
- _indexingRebuilderService = indexingRebuilderService;
- _examineManager = examineManager;
- }
-
- ///
- /// Rebuilds the index
- ///
- ///
- ///
- [HttpPost("{indexName}/rebuild")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
- [ProducesResponseType(typeof(OkResult), StatusCodes.Status200OK)]
- public async Task Rebuild(string indexName)
- {
- if (!_examineManager.TryGetIndex(indexName, out var index))
- {
- var invalidModelProblem = new ProblemDetails
- {
- Title = "Index Not Found",
- Detail = $"No index found with name = {indexName}",
- Status = StatusCodes.Status400BadRequest,
- Type = "Error",
- };
-
- return await Task.FromResult(BadRequest(invalidModelProblem));
- }
-
- if (!_indexingRebuilderService.CanRebuild(index.Name))
- {
- var invalidModelProblem = new ProblemDetails
- {
- Title = "Could not validate the populator",
- Detail =
- $"The index {index?.Name} could not be rebuilt because we could not validate its associated {typeof(IIndexPopulator)}",
- Status = StatusCodes.Status400BadRequest,
- Type = "Error",
- };
-
- return await Task.FromResult(BadRequest(invalidModelProblem));
- }
-
- _logger.LogInformation("Rebuilding index '{IndexName}'", indexName);
-
- if (_indexingRebuilderService.TryRebuild(index, indexName))
- {
- return await Task.FromResult(Ok());
- }
-
- var problemDetails = new ProblemDetails
- {
- Title = "Index could not be rebuilt",
- Detail = $"The index {index.Name} could not be rebuild. Check the log for details on this error.",
- Status = StatusCodes.Status400BadRequest,
- Type = "Error",
- };
-
- return await Task.FromResult(Conflict(problemDetails));
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Install/InstallControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Install/InstallControllerBase.cs
deleted file mode 100644
index 52fcd0e62e..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Install/InstallControllerBase.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core;
-using Umbraco.Cms.Api.Management.Filters;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Install;
-
-[ApiController]
-[VersionedApiBackOfficeRoute("install")]
-[ApiExplorerSettings(GroupName = "Install")]
-[RequireRuntimeLevel(RuntimeLevel.Install)]
-public abstract class InstallControllerBase : ManagementApiControllerBase
-{
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Install/SettingsInstallController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Install/SettingsInstallController.cs
deleted file mode 100644
index b60d4788cb..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Install/SettingsInstallController.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Mapping;
-using Umbraco.Cms.Infrastructure.Install;
-using Umbraco.Cms.Api.Management.ViewModels.Installer;
-using Umbraco.New.Cms.Core.Factories;
-using Umbraco.New.Cms.Core.Models.Installer;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Install;
-
-[ApiVersion("1.0")]
-public class SettingsInstallController : InstallControllerBase
-{
- private readonly InstallHelper _installHelper;
- private readonly IInstallSettingsFactory _installSettingsFactory;
- private readonly IUmbracoMapper _mapper;
-
- public SettingsInstallController(
- InstallHelper installHelper,
- IInstallSettingsFactory installSettingsFactory,
- IUmbracoMapper mapper)
- {
- _installHelper = installHelper;
- _installSettingsFactory = installSettingsFactory;
- _mapper = mapper;
- }
-
- [HttpGet("settings")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
- [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status428PreconditionRequired)]
- [ProducesResponseType(typeof(InstallSettingsViewModel), StatusCodes.Status200OK)]
- public async Task> Settings()
- {
- // Register that the install has started
- await _installHelper.SetInstallStatusAsync(false, string.Empty);
-
- InstallSettingsModel installSettings = _installSettingsFactory.GetInstallSettings();
- InstallSettingsViewModel viewModel = _mapper.Map(installSettings)!;
-
- return viewModel;
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Install/SetupInstallController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Install/SetupInstallController.cs
deleted file mode 100644
index 8e13fb2cfb..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Install/SetupInstallController.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.Options;
-using Umbraco.Cms.Core.Configuration.Models;
-using Umbraco.Cms.Core.Hosting;
-using Umbraco.Cms.Core.Mapping;
-using Umbraco.Cms.Api.Management.ViewModels.Installer;
-using Umbraco.Extensions;
-using Umbraco.New.Cms.Core.Models.Installer;
-using Umbraco.New.Cms.Core.Services.Installer;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Install;
-
-[ApiVersion("1.0")]
-public class SetupInstallController : InstallControllerBase
-{
- private readonly IUmbracoMapper _mapper;
- private readonly IInstallService _installService;
- private readonly IHostingEnvironment _hostingEnvironment;
- private readonly GlobalSettings _globalSettings;
-
- public SetupInstallController(
- IUmbracoMapper mapper,
- IInstallService installService,
- IOptions globalSettings,
- IHostingEnvironment hostingEnvironment)
- {
- _mapper = mapper;
- _installService = installService;
- _hostingEnvironment = hostingEnvironment;
- _globalSettings = globalSettings.Value;
- }
-
- [HttpPost("setup")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
- [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status428PreconditionRequired)]
- [ProducesResponseType(StatusCodes.Status200OK)]
- public async Task Setup(InstallViewModel installData)
- {
- InstallData data = _mapper.Map(installData)!;
- await _installService.Install(data);
-
- var backOfficePath = _globalSettings.GetBackOfficePath(_hostingEnvironment);
- return Created(backOfficePath, null);
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Install/ValidateDatabaseInstallController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Install/ValidateDatabaseInstallController.cs
deleted file mode 100644
index 16e40f1eae..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Install/ValidateDatabaseInstallController.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Install.Models;
-using Umbraco.Cms.Core.Mapping;
-using Umbraco.Cms.Infrastructure.Migrations.Install;
-using Umbraco.Cms.Api.Management.ViewModels.Installer;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Install;
-
-[ApiVersion("1.0")]
-public class ValidateDatabaseInstallController : InstallControllerBase
-{
- private readonly DatabaseBuilder _databaseBuilder;
- private readonly IUmbracoMapper _mapper;
-
- public ValidateDatabaseInstallController(
- DatabaseBuilder databaseBuilder,
- IUmbracoMapper mapper)
- {
- _databaseBuilder = databaseBuilder;
- _mapper = mapper;
- }
-
- [HttpPost("validate-database")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
- [ProducesResponseType(StatusCodes.Status200OK)]
- public async Task ValidateDatabase(DatabaseInstallViewModel viewModel)
- {
- DatabaseModel databaseModel = _mapper.Map(viewModel)!;
-
- var success = _databaseBuilder.ConfigureDatabaseConnection(databaseModel, true);
-
- if (success)
- {
- return await Task.FromResult(Ok());
- }
-
- var invalidModelProblem = new ProblemDetails
- {
- Title = "Invalid database configuration",
- Detail = "The provided database configuration is invalid",
- Status = StatusCodes.Status400BadRequest,
- Type = "Error",
- };
-
- return await Task.FromResult(BadRequest(invalidModelProblem));
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Language/AllLanguageController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Language/AllLanguageController.cs
deleted file mode 100644
index e2d0ec7f6c..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Language/AllLanguageController.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Mapping;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.ViewModels.Language;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-using Umbraco.New.Cms.Core.Models;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Language;
-
-public class AllLanguageController : LanguageControllerBase
-{
- private readonly ILocalizationService _localizationService;
- private readonly IUmbracoMapper _umbracoMapper;
-
- public AllLanguageController(ILocalizationService localizationService, IUmbracoMapper umbracoMapper)
- {
- _localizationService = localizationService;
- _umbracoMapper = umbracoMapper;
- }
-
- /// 1
- /// Returns all currently configured languages.
- ///
- ///
- [HttpGet]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> GetAll(int skip, int take)
- {
- PagedModel allLanguages = _localizationService.GetAllLanguagesPaged(skip, take);
-
- return await Task.FromResult(_umbracoMapper.Map, PagedViewModel>(allLanguages)!);
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Language/ByIdLanguageController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Language/ByIdLanguageController.cs
deleted file mode 100644
index f9b823b440..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Language/ByIdLanguageController.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Mapping;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.ViewModels.Language;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Language;
-
-public class ByIdLanguageController : LanguageControllerBase
-{
- private readonly ILocalizationService _localizationService;
- private readonly IUmbracoMapper _umbracoMapper;
-
- public ByIdLanguageController(ILocalizationService localizationService, IUmbracoMapper umbracoMapper)
- {
- _localizationService = localizationService;
- _umbracoMapper = umbracoMapper;
- }
-
- [HttpGet("{id:int}")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(NotFoundResult), StatusCodes.Status404NotFound)]
- [ProducesResponseType(StatusCodes.Status200OK)]
- public async Task> ById(int id)
- {
- ILanguage? lang = _localizationService.GetLanguageById(id);
- if (lang is null)
- {
- return NotFound();
- }
-
- return await Task.FromResult(_umbracoMapper.Map(lang));
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Language/CreateLanguageController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Language/CreateLanguageController.cs
deleted file mode 100644
index 720182ccce..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Language/CreateLanguageController.cs
+++ /dev/null
@@ -1,61 +0,0 @@
-using System.Globalization;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Mapping;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.ViewModels.Language;
-using Umbraco.New.Cms.Core.Services.Installer;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Language;
-
-public class CreateLanguageController : LanguageControllerBase
-{
- private readonly ILanguageService _languageService;
- private readonly IUmbracoMapper _umbracoMapper;
- private readonly ILocalizationService _localizationService;
-
- public CreateLanguageController(ILanguageService languageService, IUmbracoMapper umbracoMapper, ILocalizationService localizationService)
- {
- _languageService = languageService;
- _umbracoMapper = umbracoMapper;
- _localizationService = localizationService;
- }
-
- ///
- /// Creates or saves a language
- ///
- [HttpPost]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
- [ProducesResponseType(StatusCodes.Status201Created)]
- // TODO: This needs to be an authorized endpoint.
- public async Task Create(LanguageViewModel language)
- {
- if (_languageService.LanguageAlreadyExists(language.Id, language.IsoCode))
- {
- // Someone is trying to create a language that already exist
- ModelState.AddModelError("IsoCode", "The language " + language.IsoCode + " already exists");
- return ValidationProblem(ModelState);
- }
-
- // Creating a new lang...
- CultureInfo culture;
- try
- {
- culture = CultureInfo.GetCultureInfo(language.IsoCode);
- }
- catch (CultureNotFoundException)
- {
- ModelState.AddModelError("IsoCode", "No Culture found with name " + language.IsoCode);
- return ValidationProblem(ModelState);
- }
-
- language.Name ??= culture.EnglishName;
-
- ILanguage newLang = _umbracoMapper.Map(language)!;
-
- _localizationService.Save(newLang);
- return await Task.FromResult(Created($"api/v1.0/language/{newLang.Id}", null));
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Language/DeleteLanguageController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Language/DeleteLanguageController.cs
deleted file mode 100644
index 35b16628de..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Language/DeleteLanguageController.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Common.Builders;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Language;
-
-public class DeleteLanguageController : LanguageControllerBase
-{
- private readonly ILocalizationService _localizationService;
-
- public DeleteLanguageController(ILocalizationService localizationService) => _localizationService = localizationService;
-
- ///
- /// Deletes a language with a given ID
- ///
- [HttpDelete("{id:int}")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
- [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status404NotFound)]
- [ProducesResponseType(StatusCodes.Status200OK)]
- // TODO: This needs to be an authorized endpoint.
- public async Task Delete(int id)
- {
- ILanguage? language = _localizationService.GetLanguageById(id);
- if (language == null)
- {
- return await Task.FromResult(NotFound());
- }
-
- // the service would not let us do it, but test here nevertheless
- if (language.IsDefault)
- {
- ProblemDetails invalidModelProblem =
- new ProblemDetailsBuilder()
- .WithTitle("Cannot delete default language")
- .WithDetail($"Language '{language.IsoCode}' is currently set to 'default' and can not be deleted.")
- .Build();
-
- return BadRequest(invalidModelProblem);
- }
-
- // service is happy deleting a language that's fallback for another language,
- // will just remove it - so no need to check here
- _localizationService.Delete(language);
-
- return await Task.FromResult(Ok());
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Language/LanguageControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Language/LanguageControllerBase.cs
deleted file mode 100644
index df6cad192c..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Language/LanguageControllerBase.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Language;
-
-[ApiController]
-[VersionedApiBackOfficeRoute("language")]
-[ApiExplorerSettings(GroupName = "Language")]
-[ApiVersion("1.0")]
-public abstract class LanguageControllerBase : ManagementApiControllerBase
-{
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Language/UpdateLanguageController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Language/UpdateLanguageController.cs
deleted file mode 100644
index 2452d6468e..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Language/UpdateLanguageController.cs
+++ /dev/null
@@ -1,66 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Mapping;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.ViewModels.Language;
-using Umbraco.New.Cms.Core.Services.Installer;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Language;
-
-public class UpdateLanguageController : LanguageControllerBase
-{
- private readonly ILanguageService _languageService;
- private readonly IUmbracoMapper _umbracoMapper;
- private readonly ILocalizationService _localizationService;
-
- public UpdateLanguageController(ILanguageService languageService, IUmbracoMapper umbracoMapper, ILocalizationService localizationService)
- {
- _languageService = languageService;
- _umbracoMapper = umbracoMapper;
- _localizationService = localizationService;
- }
-
- ///
- /// Updates a language
- ///
- [HttpPut("{id:int}")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(NotFoundResult), StatusCodes.Status404NotFound)]
- [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
- [ProducesResponseType(StatusCodes.Status200OK)]
- // TODO: This needs to be an authorized endpoint.
- public async Task Update(int id, LanguageViewModel language)
- {
- ILanguage? existingById = _localizationService.GetLanguageById(id);
- if (existingById is null)
- {
- return await Task.FromResult(NotFound());
- }
-
- // note that the service will prevent the default language from being "un-defaulted"
- // but does not hurt to test here - though the UI should prevent it too
- if (existingById.IsDefault && !language.IsDefault)
- {
- ModelState.AddModelError("IsDefault", "Cannot un-default the default language.");
- return await Task.FromResult(ValidationProblem(ModelState));
- }
-
- existingById = _umbracoMapper.Map(language, existingById);
-
- if (!_languageService.CanUseLanguagesFallbackLanguage(existingById))
- {
- ModelState.AddModelError("FallbackLanguage", "The selected fall back language does not exist.");
- return await Task.FromResult(ValidationProblem(ModelState));
- }
-
- if (!_languageService.CanGetProperFallbackLanguage(existingById))
- {
- ModelState.AddModelError("FallbackLanguage", $"The selected fall back language {_localizationService.GetLanguageById(existingById.FallbackLanguageId!.Value)} would create a circular path.");
- return await Task.FromResult(ValidationProblem(ModelState));
- }
-
- _localizationService.Save(existingById);
- return await Task.FromResult(Ok());
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/ManagementApiControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/ManagementApiControllerBase.cs
deleted file mode 100644
index 70b5328517..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/ManagementApiControllerBase.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Api.Common.Filters;
-using Umbraco.New.Cms.Core;
-
-namespace Umbraco.Cms.Api.Management.Controllers;
-
-[JsonOptionsName(Constants.JsonOptionsNames.BackOffice)]
-public class ManagementApiControllerBase : Controller
-{
-
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Media/RecycleBin/ChildrenMediaRecycleBinController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Media/RecycleBin/ChildrenMediaRecycleBinController.cs
deleted file mode 100644
index b91c4e61d7..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Media/RecycleBin/ChildrenMediaRecycleBinController.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-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.ViewModels.RecycleBin;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Media.RecycleBin;
-
-public class ChildrenMediaRecycleBinController : MediaRecycleBinControllerBase
-{
- public ChildrenMediaRecycleBinController(IEntityService entityService)
- : base(entityService)
- {
- }
-
- [HttpGet("children")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Children(Guid parentKey, int skip = 0, int take = 100)
- => await GetChildren(parentKey, skip, take);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Media/RecycleBin/MediaRecycleBinControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Media/RecycleBin/MediaRecycleBinControllerBase.cs
deleted file mode 100644
index 82756051b7..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Media/RecycleBin/MediaRecycleBinControllerBase.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Models.Entities;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.Controllers.RecycleBin;
-using Umbraco.Cms.Api.Management.Filters;
-using Umbraco.Cms.Api.Management.ViewModels.RecycleBin;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Media.RecycleBin;
-
-[ApiVersion("1.0")]
-[ApiController]
-[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.RecycleBin}/{Constants.UdiEntityType.Media}")]
-[RequireMediaTreeRootAccess]
-[ProducesResponseType(StatusCodes.Status401Unauthorized)]
-[ApiExplorerSettings(GroupName = nameof(Constants.UdiEntityType.Media))]
-public class MediaRecycleBinControllerBase : RecycleBinControllerBase
-{
- public MediaRecycleBinControllerBase(IEntityService entityService)
- : base(entityService)
- {
- }
-
- protected override UmbracoObjectTypes ItemObjectType => UmbracoObjectTypes.Media;
-
- protected override int RecycleBinRootId => Constants.System.RecycleBinMedia;
-
- protected override RecycleBinItemViewModel MapRecycleBinViewModel(Guid? parentKey, IEntitySlim entity)
- {
- RecycleBinItemViewModel viewModel = base.MapRecycleBinViewModel(parentKey, entity);
-
- if (entity is IMediaEntitySlim mediaEntitySlim)
- {
- viewModel.Icon = mediaEntitySlim.ContentTypeIcon ?? viewModel.Icon;
- }
-
- return viewModel;
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Media/RecycleBin/RootMediaRecycleBinController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Media/RecycleBin/RootMediaRecycleBinController.cs
deleted file mode 100644
index 5379fec5c3..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Media/RecycleBin/RootMediaRecycleBinController.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-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.ViewModels.RecycleBin;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Media.RecycleBin;
-
-public class RootMediaRecycleBinController : MediaRecycleBinControllerBase
-{
- public RootMediaRecycleBinController(IEntityService entityService)
- : base(entityService)
- {
- }
-
- [HttpGet("root")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Root(int skip = 0, int take = 100)
- => await GetRoot(skip, take);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Media/Tree/ChildrenMediaTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Media/Tree/ChildrenMediaTreeController.cs
deleted file mode 100644
index 51fc8dfee5..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Media/Tree/ChildrenMediaTreeController.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Cache;
-using Umbraco.Cms.Core.Security;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.Services.Entities;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Media.Tree;
-
-public class ChildrenMediaTreeController : MediaTreeControllerBase
-{
- public ChildrenMediaTreeController(
- IEntityService entityService,
- IUserStartNodeEntitiesService userStartNodeEntitiesService,
- IDataTypeService dataTypeService,
- AppCaches appCaches,
- IBackOfficeSecurityAccessor backofficeSecurityAccessor)
- : base(entityService, userStartNodeEntitiesService, dataTypeService, appCaches, backofficeSecurityAccessor)
- {
- }
-
- [HttpGet("children")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Children(Guid parentKey, int skip = 0, int take = 100, Guid? dataTypeKey = null)
- {
- IgnoreUserStartNodesForDataType(dataTypeKey);
- return await GetChildren(parentKey, skip, take);
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Media/Tree/ItemsMediaTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Media/Tree/ItemsMediaTreeController.cs
deleted file mode 100644
index 4305ec4cab..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Media/Tree/ItemsMediaTreeController.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Cache;
-using Umbraco.Cms.Core.Security;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.Services.Entities;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Media.Tree;
-
-public class ItemsMediaTreeController : MediaTreeControllerBase
-{
- public ItemsMediaTreeController(
- IEntityService entityService,
- IUserStartNodeEntitiesService userStartNodeEntitiesService,
- IDataTypeService dataTypeService,
- AppCaches appCaches,
- IBackOfficeSecurityAccessor backofficeSecurityAccessor)
- : base(entityService, userStartNodeEntitiesService, dataTypeService, appCaches, backofficeSecurityAccessor)
- {
- }
-
- [HttpGet("item")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)]
- public async Task>> Items([FromQuery(Name = "key")] Guid[] keys, Guid? dataTypeKey = null)
- {
- IgnoreUserStartNodesForDataType(dataTypeKey);
- return await GetItems(keys);
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Media/Tree/MediaTreeControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Media/Tree/MediaTreeControllerBase.cs
deleted file mode 100644
index b3a2769e87..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Media/Tree/MediaTreeControllerBase.cs
+++ /dev/null
@@ -1,72 +0,0 @@
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core;
-using Umbraco.Cms.Core.Cache;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Models.Entities;
-using Umbraco.Cms.Core.Security;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.Controllers.Tree;
-using Umbraco.Cms.Api.Management.Services.Entities;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Media.Tree;
-
-[ApiVersion("1.0")]
-[ApiController]
-[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Tree}/{Constants.UdiEntityType.Media}")]
-[ApiExplorerSettings(GroupName = nameof(Constants.UdiEntityType.Media))]
-public class MediaTreeControllerBase : UserStartNodeTreeControllerBase
-{
- private readonly AppCaches _appCaches;
- private readonly IBackOfficeSecurityAccessor _backofficeSecurityAccessor;
-
- public MediaTreeControllerBase(
- IEntityService entityService,
- IUserStartNodeEntitiesService userStartNodeEntitiesService,
- IDataTypeService dataTypeService,
- AppCaches appCaches,
- IBackOfficeSecurityAccessor backofficeSecurityAccessor)
- : base(entityService, userStartNodeEntitiesService, dataTypeService)
- {
- _appCaches = appCaches;
- _backofficeSecurityAccessor = backofficeSecurityAccessor;
- }
-
- protected override UmbracoObjectTypes ItemObjectType => UmbracoObjectTypes.Media;
-
- protected override Ordering ItemOrdering => Ordering.By(nameof(Infrastructure.Persistence.Dtos.NodeDto.SortOrder));
-
- protected override ContentTreeItemViewModel MapTreeItemViewModel(Guid? parentKey, IEntitySlim entity)
- {
- ContentTreeItemViewModel viewModel = base.MapTreeItemViewModel(parentKey, entity);
-
- if (entity is IMediaEntitySlim mediaEntitySlim)
- {
- viewModel.Icon = mediaEntitySlim.ContentTypeIcon ?? viewModel.Icon;
- }
-
- return viewModel;
- }
-
- // TODO: delete these (faking start node setup for unlimited editor)
- protected override int[] GetUserStartNodeIds() => new[] { -1 };
-
- protected override string[] GetUserStartNodePaths() => Array.Empty();
-
- // TODO: use these implementations instead of the dummy ones above once we have backoffice auth in place
- // protected override int[] GetUserStartNodeIds()
- // => _backofficeSecurityAccessor
- // .BackOfficeSecurity?
- // .CurrentUser?
- // .CalculateMediaStartNodeIds(EntityService, _appCaches)
- // ?? Array.Empty();
- //
- // protected override string[] GetUserStartNodePaths()
- // => _backofficeSecurityAccessor
- // .BackOfficeSecurity?
- // .CurrentUser?
- // .GetMediaStartNodePaths(EntityService, _appCaches)
- // ?? Array.Empty();
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Media/Tree/RootMediaTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Media/Tree/RootMediaTreeController.cs
deleted file mode 100644
index 31d07715b6..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Media/Tree/RootMediaTreeController.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Cache;
-using Umbraco.Cms.Core.Security;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.Services.Entities;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Media.Tree;
-
-public class RootMediaTreeController : MediaTreeControllerBase
-{
- public RootMediaTreeController(
- IEntityService entityService,
- IUserStartNodeEntitiesService userStartNodeEntitiesService,
- IDataTypeService dataTypeService,
- AppCaches appCaches,
- IBackOfficeSecurityAccessor backofficeSecurityAccessor)
- : base(entityService, userStartNodeEntitiesService, dataTypeService, appCaches, backofficeSecurityAccessor)
- {
- }
-
- [HttpGet("root")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Root(int skip = 0, int take = 100, Guid? dataTypeKey = null)
- {
- IgnoreUserStartNodesForDataType(dataTypeKey);
- return await GetRoot(skip, take);
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/MediaType/Tree/ChildrenMediaTypeTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/MediaType/Tree/ChildrenMediaTypeTreeController.cs
deleted file mode 100644
index 4e8ceee792..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/MediaType/Tree/ChildrenMediaTypeTreeController.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-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.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.MediaType.Tree;
-
-public class ChildrenMediaTypeTreeController : MediaTypeTreeControllerBase
-{
- public ChildrenMediaTypeTreeController(IEntityService entityService, IMediaTypeService mediaTypeService)
- : base(entityService, mediaTypeService)
- {
- }
-
- [HttpGet("children")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Children(Guid parentKey, int skip = 0, int take = 100, bool foldersOnly = false)
- {
- RenderFoldersOnly(foldersOnly);
- return await GetChildren(parentKey, skip, take);
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/MediaType/Tree/ItemsMediaTypeTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/MediaType/Tree/ItemsMediaTypeTreeController.cs
deleted file mode 100644
index 881276da3e..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/MediaType/Tree/ItemsMediaTypeTreeController.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.MediaType.Tree;
-
-public class ItemsMediaTypeTreeController : MediaTypeTreeControllerBase
-{
- public ItemsMediaTypeTreeController(IEntityService entityService, IMediaTypeService mediaTypeService)
- : base(entityService, mediaTypeService)
- {
- }
-
- [HttpGet("item")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)]
- public async Task>> Items([FromQuery(Name = "key")] Guid[] keys)
- => await GetItems(keys);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/MediaType/Tree/MediaTypeTreeControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/MediaType/Tree/MediaTypeTreeControllerBase.cs
deleted file mode 100644
index 63aeb0390d..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/MediaType/Tree/MediaTypeTreeControllerBase.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core;
-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.ViewModels.Tree;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.MediaType.Tree;
-
-[ApiVersion("1.0")]
-[ApiController]
-[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Tree}/{Constants.UdiEntityType.MediaType}")]
-[ApiExplorerSettings(GroupName = "Media Type")]
-public class MediaTypeTreeControllerBase : FolderTreeControllerBase
-{
- private readonly IMediaTypeService _mediaTypeService;
-
- public MediaTypeTreeControllerBase(IEntityService entityService, IMediaTypeService mediaTypeService)
- : base(entityService) =>
- _mediaTypeService = mediaTypeService;
-
- protected override UmbracoObjectTypes ItemObjectType => UmbracoObjectTypes.MediaType;
-
- protected override UmbracoObjectTypes FolderObjectType => UmbracoObjectTypes.MediaTypeContainer;
-
- protected override FolderTreeItemViewModel[] MapTreeItemViewModels(Guid? parentKey, IEntitySlim[] entities)
- {
- var mediaTypes = _mediaTypeService
- .GetAll(entities.Select(entity => entity.Id).ToArray())
- .ToDictionary(contentType => contentType.Id);
-
- return entities.Select(entity =>
- {
- FolderTreeItemViewModel viewModel = MapTreeItemViewModel(parentKey, entity);
- if (mediaTypes.TryGetValue(entity.Id, out IMediaType? mediaType))
- {
- viewModel.Icon = mediaType.Icon ?? viewModel.Icon;
- }
-
- return viewModel;
- }).ToArray();
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/MediaType/Tree/RootMediaTypeTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/MediaType/Tree/RootMediaTypeTreeController.cs
deleted file mode 100644
index 0dd09b56d3..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/MediaType/Tree/RootMediaTypeTreeController.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-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.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.MediaType.Tree;
-
-public class RootMediaTypeTreeController : MediaTypeTreeControllerBase
-{
- public RootMediaTypeTreeController(IEntityService entityService, IMediaTypeService mediaTypeService)
- : base(entityService, mediaTypeService)
- {
- }
-
- [HttpGet("root")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Root(int skip = 0, int take = 100, bool foldersOnly = false)
- {
- RenderFoldersOnly(foldersOnly);
- return await GetRoot(skip, take);
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/MemberGroup/Tree/ItemsMemberGroupTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/MemberGroup/Tree/ItemsMemberGroupTreeController.cs
deleted file mode 100644
index 9f6ad89275..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/MemberGroup/Tree/ItemsMemberGroupTreeController.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.MemberGroup.Tree;
-
-public class ItemsMemberGroupTreeController : MemberGroupTreeControllerBase
-{
- public ItemsMemberGroupTreeController(IEntityService entityService)
- : base(entityService)
- {
- }
-
- [HttpGet("item")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)]
- public async Task>> Items([FromQuery(Name = "key")] Guid[] keys)
- => await GetItems(keys);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/MemberGroup/Tree/MemberGroupTreeControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/MemberGroup/Tree/MemberGroupTreeControllerBase.cs
deleted file mode 100644
index 5fa672dcaa..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/MemberGroup/Tree/MemberGroupTreeControllerBase.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core;
-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.ViewModels.Tree;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.MemberGroup.Tree;
-
-[ApiVersion("1.0")]
-[ApiController]
-[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Tree}/{Constants.UdiEntityType.MemberGroup}")]
-[ApiExplorerSettings(GroupName = "Member Group")]
-public class MemberGroupTreeControllerBase : EntityTreeControllerBase
-{
- public MemberGroupTreeControllerBase(IEntityService entityService)
- : base(entityService)
- {
- }
-
- protected override UmbracoObjectTypes ItemObjectType => UmbracoObjectTypes.MemberGroup;
-
- protected override EntityTreeItemViewModel MapTreeItemViewModel(Guid? parentKey, IEntitySlim entity)
- {
- EntityTreeItemViewModel viewModel = base.MapTreeItemViewModel(parentKey, entity);
- viewModel.Icon = Constants.Icons.MemberGroup;
- return viewModel;
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/MemberGroup/Tree/RootMemberGroupTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/MemberGroup/Tree/RootMemberGroupTreeController.cs
deleted file mode 100644
index 591ab3344f..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/MemberGroup/Tree/RootMemberGroupTreeController.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-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.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.MemberGroup.Tree;
-
-public class RootMemberGroupTreeController : MemberGroupTreeControllerBase
-{
- public RootMemberGroupTreeController(IEntityService entityService)
- : base(entityService)
- {
- }
-
- [HttpGet("root")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Root(int skip = 0, int take = 100)
- => await GetRoot(skip, take);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/MemberType/Tree/ItemsMemberTypeTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/MemberType/Tree/ItemsMemberTypeTreeController.cs
deleted file mode 100644
index ec8e68262f..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/MemberType/Tree/ItemsMemberTypeTreeController.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.MemberType.Tree;
-
-public class ItemsMemberTypeTreeController : MemberTypeTreeControllerBase
-{
- public ItemsMemberTypeTreeController(IEntityService entityService)
- : base(entityService)
- {
- }
-
- [HttpGet("item")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)]
- public async Task>> Items([FromQuery(Name = "key")] Guid[] keys)
- => await GetItems(keys);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/MemberType/Tree/MemberTypeTreeControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/MemberType/Tree/MemberTypeTreeControllerBase.cs
deleted file mode 100644
index 8d4c2b5ba9..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/MemberType/Tree/MemberTypeTreeControllerBase.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core;
-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.ViewModels.Tree;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.MemberType.Tree;
-
-[ApiVersion("1.0")]
-[ApiController]
-[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Tree}/{Constants.UdiEntityType.MemberType}")]
-[ApiExplorerSettings(GroupName = "Member Type")]
-public class MemberTypeTreeControllerBase : EntityTreeControllerBase
-{
- public MemberTypeTreeControllerBase(IEntityService entityService)
- : base(entityService)
- {
- }
-
- protected override UmbracoObjectTypes ItemObjectType => UmbracoObjectTypes.MemberType;
-
- protected override EntityTreeItemViewModel MapTreeItemViewModel(Guid? parentKey, IEntitySlim entity)
- {
- EntityTreeItemViewModel viewModel = base.MapTreeItemViewModel(parentKey, entity);
- viewModel.Icon = Constants.Icons.User;
- return viewModel;
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/MemberType/Tree/RootMemberTypeTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/MemberType/Tree/RootMemberTypeTreeController.cs
deleted file mode 100644
index 4262b09085..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/MemberType/Tree/RootMemberTypeTreeController.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-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.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.MemberType.Tree;
-
-public class RootMemberTypeTreeController : MemberTypeTreeControllerBase
-{
- public RootMemberTypeTreeController(IEntityService entityService)
- : base(entityService)
- {
- }
-
- [HttpGet("root")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Root(int skip = 0, int take = 100)
- => await GetRoot(skip, take);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/ModelsBuilder/BuildModelsBuilderController.cs b/src/Umbraco.Cms.Api.Management/Controllers/ModelsBuilder/BuildModelsBuilderController.cs
deleted file mode 100644
index 5fd8233579..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/ModelsBuilder/BuildModelsBuilderController.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-using System;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.Options;
-using Umbraco.Cms.Core.Configuration.Models;
-using Umbraco.Cms.Infrastructure.ModelsBuilder;
-using Umbraco.Cms.Infrastructure.ModelsBuilder.Building;
-using Umbraco.Extensions;
-
-namespace Umbraco.Cms.Api.Management.Controllers.ModelsBuilder;
-
-public class BuildModelsBuilderController : ModelsBuilderControllerBase
-{
- private ModelsBuilderSettings _modelsBuilderSettings;
- private readonly ModelsGenerationError _mbErrors;
- private readonly ModelsGenerator _modelGenerator;
-
- public BuildModelsBuilderController(
- IOptionsMonitor modelsBuilderSettings,
- ModelsGenerationError mbErrors,
- ModelsGenerator modelGenerator)
- {
- _mbErrors = mbErrors;
- _modelGenerator = modelGenerator;
- _modelsBuilderSettings = modelsBuilderSettings.CurrentValue;
-
- modelsBuilderSettings.OnChange(x => _modelsBuilderSettings = x);
- }
-
- [HttpPost("build")]
- [ProducesResponseType(typeof(CreatedResult), StatusCodes.Status201Created)]
- [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status428PreconditionRequired)]
- [MapToApiVersion("1.0")]
- public async Task BuildModels()
- {
- try
- {
- if (!_modelsBuilderSettings.ModelsMode.SupportsExplicitGeneration())
- {
- var problemDetailsModel = new ProblemDetails
- {
- Title = "Models generation is not enabled",
- Detail = "ModelsBuilderMode is not set to SourceCodeManual or SourceCodeAuto",
- Status = StatusCodes.Status428PreconditionRequired,
- Type = "Error",
- };
-
- return await Task.FromResult(new ObjectResult(problemDetailsModel) { StatusCode = StatusCodes.Status428PreconditionRequired });
- }
-
- _modelGenerator.GenerateModels();
- _mbErrors.Clear();
- }
- catch (Exception e)
- {
- _mbErrors.Report("Failed to build models.", e);
- }
-
- return await Task.FromResult(Created("api/v1/modelsBuilderDashboard", null));
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/ModelsBuilder/GetModelsBuilderController.cs b/src/Umbraco.Cms.Api.Management/Controllers/ModelsBuilder/GetModelsBuilderController.cs
deleted file mode 100644
index 4b7d29a443..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/ModelsBuilder/GetModelsBuilderController.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Api.Management.Factories;
-using Umbraco.Cms.Api.Management.ViewModels.ModelsBuilderDashboard;
-
-namespace Umbraco.Cms.Api.Management.Controllers.ModelsBuilder;
-
-public class GetModelsBuilderController : ModelsBuilderControllerBase
-{
- private readonly IModelsBuilderViewModelFactory _modelsBuilderViewModelFactory;
-
- public GetModelsBuilderController(IModelsBuilderViewModelFactory modelsBuilderViewModelFactory) => _modelsBuilderViewModelFactory = modelsBuilderViewModelFactory;
-
- [HttpGet("dashboard")]
- [ProducesResponseType(typeof(ModelsBuilderViewModel), StatusCodes.Status200OK)]
- [MapToApiVersion("1.0")]
- public async Task> GetDashboard() => await Task.FromResult(Ok(_modelsBuilderViewModelFactory.Create()));
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/ModelsBuilder/ModelsBuilderControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/ModelsBuilder/ModelsBuilderControllerBase.cs
deleted file mode 100644
index ca018896ed..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/ModelsBuilder/ModelsBuilderControllerBase.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.ModelsBuilder;
-
-[ApiController]
-[VersionedApiBackOfficeRoute("models-builder")]
-[ApiExplorerSettings(GroupName = "Models Builder")]
-[ApiVersion("1.0")]
-
-public class ModelsBuilderControllerBase : ManagementApiControllerBase
-{
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/ModelsBuilder/StatusModelsBuilderController.cs b/src/Umbraco.Cms.Api.Management/Controllers/ModelsBuilder/StatusModelsBuilderController.cs
deleted file mode 100644
index b660fdedcc..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/ModelsBuilder/StatusModelsBuilderController.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Infrastructure.ModelsBuilder;
-using Umbraco.Cms.Api.Management.ViewModels.ModelsBuilderDashboard;
-using Umbraco.New.Cms.Core.Models;
-
-namespace Umbraco.Cms.Api.Management.Controllers.ModelsBuilder;
-
-public class StatusModelsBuilderController : ModelsBuilderControllerBase
-{
- private readonly OutOfDateModelsStatus _outOfDateModelsStatus;
-
- public StatusModelsBuilderController(OutOfDateModelsStatus outOfDateModelsStatus) => _outOfDateModelsStatus = outOfDateModelsStatus;
-
- [HttpGet("status")]
- [ProducesResponseType(typeof(OutOfDateStatusViewModel), StatusCodes.Status200OK)]
- [MapToApiVersion("1.0")]
- public async Task> GetModelsOutOfDateStatus()
- {
- OutOfDateStatusViewModel status = _outOfDateModelsStatus.IsEnabled
- ? _outOfDateModelsStatus.IsOutOfDate
- ? new OutOfDateStatusViewModel { Status = OutOfDateType.OutOfDate }
- : new OutOfDateStatusViewModel { Status = OutOfDateType.Current }
- : new OutOfDateStatusViewModel { Status = OutOfDateType.Unknown };
-
- return await Task.FromResult(Ok(status));
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/PartialView/Tree/ChildrenPartialViewTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/PartialView/Tree/ChildrenPartialViewTreeController.cs
deleted file mode 100644
index 408feeb09e..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/PartialView/Tree/ChildrenPartialViewTreeController.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.IO;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.PartialView.Tree;
-
-public class ChildrenPartialViewTreeController : PartialViewTreeControllerBase
-{
- public ChildrenPartialViewTreeController(FileSystems fileSystems)
- : base(fileSystems)
- {
- }
-
- [HttpGet("children")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Children(string path, int skip = 0, int take = 100)
- => await GetChildren(path, skip, take);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/PartialView/Tree/ItemsPartialViewTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/PartialView/Tree/ItemsPartialViewTreeController.cs
deleted file mode 100644
index 48bf294822..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/PartialView/Tree/ItemsPartialViewTreeController.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.IO;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.PartialView.Tree;
-
-public class ItemsPartialViewTreeController : PartialViewTreeControllerBase
-{
- public ItemsPartialViewTreeController(FileSystems fileSystems)
- : base(fileSystems)
- {
- }
-
- [HttpGet("item")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)]
- public async Task>> Items([FromQuery(Name = "path")] string[] paths)
- => await GetItems(paths);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/PartialView/Tree/PartialViewTreeControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/PartialView/Tree/PartialViewTreeControllerBase.cs
deleted file mode 100644
index 45fef6eb7f..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/PartialView/Tree/PartialViewTreeControllerBase.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core;
-using Umbraco.Cms.Core.IO;
-using Umbraco.Cms.Api.Management.Controllers.Tree;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.PartialView.Tree;
-
-[ApiVersion("1.0")]
-[ApiController]
-[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Tree}/{Constants.UdiEntityType.PartialView}")]
-[ApiExplorerSettings(GroupName = "Partial View")]
-public class PartialViewTreeControllerBase : FileSystemTreeControllerBase
-{
- public PartialViewTreeControllerBase(FileSystems fileSystems)
- => FileSystem = fileSystems.PartialViewsFileSystem ??
- throw new ArgumentException("Missing partial views file system", nameof(fileSystems));
-
- protected override IFileSystem FileSystem { get; }
-
- protected override string FileIcon(string path) => Constants.Icons.PartialView;
-
- protected override string ItemType(string path) => Constants.UdiEntityType.PartialView;
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/PartialView/Tree/RootPartialViewTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/PartialView/Tree/RootPartialViewTreeController.cs
deleted file mode 100644
index c4c689df51..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/PartialView/Tree/RootPartialViewTreeController.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.IO;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.PartialView.Tree;
-
-public class RootPartialViewTreeController : PartialViewTreeControllerBase
-{
- public RootPartialViewTreeController(FileSystems fileSystems)
- : base(fileSystems)
- {
- }
-
- [HttpGet("root")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Root(int skip = 0, int take = 100)
- => await GetRoot(skip, take);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Profiling/ProfilingControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Profiling/ProfilingControllerBase.cs
deleted file mode 100644
index 07b068f5c9..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Profiling/ProfilingControllerBase.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Profiling;
-
-[ApiVersion("1.0")]
-[ApiController]
-[VersionedApiBackOfficeRoute("profiling")]
-[ApiExplorerSettings(GroupName = "Profiling")]
-public class ProfilingControllerBase : ManagementApiControllerBase
-{
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Profiling/StatusProfilingController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Profiling/StatusProfilingController.cs
deleted file mode 100644
index 5738655e14..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Profiling/StatusProfilingController.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Hosting;
-using Umbraco.Cms.Api.Management.ViewModels.Profiling;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Profiling;
-
-public class StatusProfilingController : ProfilingControllerBase
-{
- private readonly IHostingEnvironment _hosting;
-
- public StatusProfilingController(IHostingEnvironment hosting) => _hosting = hosting;
-
- [HttpGet("status")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(ProfilingStatusViewModel), StatusCodes.Status200OK)]
- public async Task> Status()
- => await Task.FromResult(Ok(new ProfilingStatusViewModel(_hosting.IsDebugMode)));
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/PublishedCache/CollectPublishedCacheController.cs b/src/Umbraco.Cms.Api.Management/Controllers/PublishedCache/CollectPublishedCacheController.cs
deleted file mode 100644
index eecb495f7a..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/PublishedCache/CollectPublishedCacheController.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.PublishedCache;
-
-namespace Umbraco.Cms.Api.Management.Controllers.PublishedCache;
-
-public class CollectPublishedCacheController : PublishedCacheControllerBase
-{
- private readonly IPublishedSnapshotService _publishedSnapshotService;
-
- public CollectPublishedCacheController(IPublishedSnapshotService publishedSnapshotService)
- => _publishedSnapshotService = publishedSnapshotService;
-
- [HttpPost("collect")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(StatusCodes.Status200OK)]
- public async Task Collect()
- {
- GC.Collect();
- await _publishedSnapshotService.CollectAsync();
- return Ok();
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/PublishedCache/PublishedCacheControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/PublishedCache/PublishedCacheControllerBase.cs
deleted file mode 100644
index aa8db8b316..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/PublishedCache/PublishedCacheControllerBase.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.PublishedCache;
-
-[ApiVersion("1.0")]
-[ApiController]
-[VersionedApiBackOfficeRoute("published-cache")]
-[ApiExplorerSettings(GroupName = "Published Cache")]
-public class PublishedCacheControllerBase : ManagementApiControllerBase
-{
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/PublishedCache/RebuildPublishedCacheController.cs b/src/Umbraco.Cms.Api.Management/Controllers/PublishedCache/RebuildPublishedCacheController.cs
deleted file mode 100644
index c7742b567f..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/PublishedCache/RebuildPublishedCacheController.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.PublishedCache;
-
-namespace Umbraco.Cms.Api.Management.Controllers.PublishedCache;
-
-public class RebuildPublishedCacheController : PublishedCacheControllerBase
-{
- private readonly IPublishedSnapshotService _publishedSnapshotService;
-
- public RebuildPublishedCacheController(IPublishedSnapshotService publishedSnapshotService)
- => _publishedSnapshotService = publishedSnapshotService;
-
- [HttpPost("rebuild")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(StatusCodes.Status200OK)]
- public async Task Rebuild()
- {
- _publishedSnapshotService.Rebuild();
- return await Task.FromResult(Ok());
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/PublishedCache/ReloadPublishedCacheController.cs b/src/Umbraco.Cms.Api.Management/Controllers/PublishedCache/ReloadPublishedCacheController.cs
deleted file mode 100644
index 36c36a64b7..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/PublishedCache/ReloadPublishedCacheController.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Cache;
-using Umbraco.Extensions;
-
-namespace Umbraco.Cms.Api.Management.Controllers.PublishedCache;
-
-public class ReloadPublishedCacheController : PublishedCacheControllerBase
-{
- private readonly DistributedCache _distributedCache;
-
- public ReloadPublishedCacheController(DistributedCache distributedCache) => _distributedCache = distributedCache;
-
- [HttpPost("reload")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(StatusCodes.Status200OK)]
- public async Task Reload()
- {
- _distributedCache.RefreshAllPublishedSnapshot();
- return await Task.FromResult(Ok());
- }
-}
-
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/PublishedCache/StatusPublishedCacheController.cs b/src/Umbraco.Cms.Api.Management/Controllers/PublishedCache/StatusPublishedCacheController.cs
deleted file mode 100644
index ba24605f79..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/PublishedCache/StatusPublishedCacheController.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.PublishedCache;
-
-namespace Umbraco.Cms.Api.Management.Controllers.PublishedCache;
-
-public class StatusPublishedCacheController : PublishedCacheControllerBase
-{
- private readonly IPublishedSnapshotStatus _publishedSnapshotStatus;
-
- public StatusPublishedCacheController(IPublishedSnapshotStatus publishedSnapshotStatus)
- => _publishedSnapshotStatus = publishedSnapshotStatus;
-
- [HttpGet("status")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(string), StatusCodes.Status200OK)]
- public async Task> Status()
- => await Task.FromResult(Ok(_publishedSnapshotStatus.GetStatus()));
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/RecycleBin/RecycleBinControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/RecycleBin/RecycleBinControllerBase.cs
deleted file mode 100644
index f92b6fd879..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/RecycleBin/RecycleBinControllerBase.cs
+++ /dev/null
@@ -1,111 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Models.Entities;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.Services.Paging;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-using Umbraco.Cms.Api.Management.ViewModels.RecycleBin;
-
-namespace Umbraco.Cms.Api.Management.Controllers.RecycleBin;
-
-public abstract class RecycleBinControllerBase : Controller
- where TItem : RecycleBinItemViewModel, new()
-{
- private readonly IEntityService _entityService;
- private readonly string _itemUdiType;
-
- protected RecycleBinControllerBase(IEntityService entityService)
- {
- _entityService = entityService;
- // ReSharper disable once VirtualMemberCallInConstructor
- _itemUdiType = ItemObjectType.GetUdiType();
- }
-
- protected abstract UmbracoObjectTypes ItemObjectType { get; }
-
- protected abstract int RecycleBinRootId { get; }
-
- protected async Task>> GetRoot(int skip, int take)
- {
- if (PaginationService.ConvertSkipTakeToPaging(skip, take, out var pageNumber, out var pageSize, out ProblemDetails? error) == false)
- {
- return BadRequest(error);
- }
-
- IEntitySlim[] rootEntities = GetPagedRootEntities(pageNumber, pageSize, out var totalItems);
-
- TItem[] treeItemViewModels = MapRecycleBinViewModels(null, rootEntities);
-
- PagedViewModel result = PagedViewModel(treeItemViewModels, totalItems);
- return await Task.FromResult(Ok(result));
- }
-
- protected async Task>> GetChildren(Guid parentKey, int skip, int take)
- {
- if (PaginationService.ConvertSkipTakeToPaging(skip, take, out var pageNumber, out var pageSize, out ProblemDetails? error) == false)
- {
- return BadRequest(error);
- }
-
- IEntitySlim[] children = GetPagedChildEntities(parentKey, pageNumber, pageSize, out var totalItems);
-
- TItem[] treeItemViewModels = MapRecycleBinViewModels(parentKey, children);
-
- PagedViewModel result = PagedViewModel(treeItemViewModels, totalItems);
-
- return await Task.FromResult(Ok(result));
- }
-
- protected virtual TItem MapRecycleBinViewModel(Guid? parentKey, IEntitySlim entity)
- {
- if (entity == null)
- {
- throw new ArgumentNullException(nameof(entity));
- }
-
- var viewModel = new TItem
- {
- Icon = _itemUdiType,
- Name = entity.Name!,
- Key = entity.Key,
- Type = _itemUdiType,
- HasChildren = entity.HasChildren,
- IsContainer = entity.IsContainer,
- ParentKey = parentKey
- };
-
- return viewModel;
- }
-
- private IEntitySlim[] GetPagedRootEntities(long pageNumber, int pageSize, out long totalItems)
- {
- IEntitySlim[] rootEntities = _entityService
- .GetPagedTrashedChildren(RecycleBinRootId, ItemObjectType, pageNumber, pageSize, out totalItems)
- .ToArray();
-
- return rootEntities;
- }
-
- private IEntitySlim[] GetPagedChildEntities(Guid parentKey, long pageNumber, int pageSize, out long totalItems)
- {
- IEntitySlim? parent = _entityService.Get(parentKey, ItemObjectType);
- if (parent == null || parent.Trashed == false)
- {
- // not much else we can do here but return nothing
- totalItems = 0;
- return Array.Empty();
- }
-
- IEntitySlim[] children = _entityService
- .GetPagedTrashedChildren(parent.Id, ItemObjectType, pageNumber, pageSize, out totalItems)
- .ToArray();
-
- return children;
- }
-
- private TItem[] MapRecycleBinViewModels(Guid? parentKey, IEntitySlim[] entities)
- => entities.Select(entity => MapRecycleBinViewModel(parentKey, entity)).ToArray();
-
- private PagedViewModel PagedViewModel(IEnumerable treeItemViewModels, long totalItems)
- => new() { Total = totalItems, Items = treeItemViewModels };
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/RedirectUrlManagement/ByKeyRedirectUrlManagementController.cs b/src/Umbraco.Cms.Api.Management/Controllers/RedirectUrlManagement/ByKeyRedirectUrlManagementController.cs
deleted file mode 100644
index 57e7f17df3..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/RedirectUrlManagement/ByKeyRedirectUrlManagementController.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-using Umbraco.Cms.Api.Management.Factories;
-using Umbraco.Cms.Api.Management.ViewModels.RedirectUrlManagement;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Services;
-
-namespace Umbraco.Cms.Api.Management.Controllers.RedirectUrlManagement;
-
-public class ByKeyRedirectUrlManagementController : RedirectUrlManagementBaseController
-{
- private readonly IRedirectUrlService _redirectUrlService;
- private readonly IRedirectUrlViewModelFactory _redirectUrlViewModelFactory;
-
- public ByKeyRedirectUrlManagementController(
- IRedirectUrlService redirectUrlService,
- IRedirectUrlViewModelFactory redirectUrlViewModelFactory)
- {
- _redirectUrlService = redirectUrlService;
- _redirectUrlViewModelFactory = redirectUrlViewModelFactory;
- }
-
- [HttpGet("{key:guid}")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public Task>> ByKey(Guid key, int skip, int take)
- {
- IRedirectUrl[] redirects = _redirectUrlService.GetContentRedirectUrls(key).ToArray();
-
- IEnumerable viewModels = _redirectUrlViewModelFactory.CreateMany(redirects);
-
- return Task.FromResult>>(new PagedViewModel
- {
- Items = viewModels.Skip(skip).Take(take),
- Total = redirects.Length,
- });
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/RedirectUrlManagement/DeleteByKeyRedirectUrlManagementController.cs b/src/Umbraco.Cms.Api.Management/Controllers/RedirectUrlManagement/DeleteByKeyRedirectUrlManagementController.cs
deleted file mode 100644
index fbab340a73..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/RedirectUrlManagement/DeleteByKeyRedirectUrlManagementController.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Services;
-
-namespace Umbraco.Cms.Api.Management.Controllers.RedirectUrlManagement;
-
-public class DeleteByKeyRedirectUrlManagementController : RedirectUrlManagementBaseController
-{
- private readonly IRedirectUrlService _redirectUrlService;
-
- public DeleteByKeyRedirectUrlManagementController(IRedirectUrlService redirectUrlService)
- {
- _redirectUrlService = redirectUrlService;
- }
-
- [HttpDelete("{key:guid}")]
- [ProducesResponseType(StatusCodes.Status200OK)]
- public async Task DeleteByKey(Guid key)
- {
- _redirectUrlService.Delete(key);
- return Ok();
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/RedirectUrlManagement/GetAllRedirectUrlManagementController.cs b/src/Umbraco.Cms.Api.Management/Controllers/RedirectUrlManagement/GetAllRedirectUrlManagementController.cs
deleted file mode 100644
index 8c375a416e..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/RedirectUrlManagement/GetAllRedirectUrlManagementController.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-using Umbraco.Cms.Api.Management.Factories;
-using Umbraco.Cms.Api.Management.Services.Paging;
-using Umbraco.Cms.Api.Management.ViewModels.RedirectUrlManagement;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Services;
-
-namespace Umbraco.Cms.Api.Management.Controllers.RedirectUrlManagement;
-
-public class GetAllRedirectUrlManagementController : RedirectUrlManagementBaseController
-{
- private readonly IRedirectUrlService _redirectUrlService;
- private readonly IRedirectUrlViewModelFactory _redirectUrlViewModelFactory;
-
- public GetAllRedirectUrlManagementController(
- IRedirectUrlService redirectUrlService,
- IRedirectUrlViewModelFactory redirectUrlViewModelFactory)
- {
- _redirectUrlService = redirectUrlService;
- _redirectUrlViewModelFactory = redirectUrlViewModelFactory;
- }
-
- [HttpGet]
- [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> GetAll(string? filter, int skip, int take)
- {
- if (PaginationService.ConvertSkipTakeToPaging(skip, take, out long pageNumber, out int pageSize, out ProblemDetails? error) is false)
- {
- return BadRequest(error);
- }
-
- long total;
- IEnumerable redirects = filter is null
- ? _redirectUrlService.GetAllRedirectUrls(pageNumber, pageSize, out total)
- : _redirectUrlService.SearchRedirectUrls(filter, pageNumber, pageSize, out total);
-
- IEnumerable redirectViewModels = _redirectUrlViewModelFactory.CreateMany(redirects);
- return new PagedViewModel { Items = redirectViewModels, Total = total };
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/RedirectUrlManagement/GetStatusRedirectUrlManagementController.cs b/src/Umbraco.Cms.Api.Management/Controllers/RedirectUrlManagement/GetStatusRedirectUrlManagementController.cs
deleted file mode 100644
index 779d95bc56..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/RedirectUrlManagement/GetStatusRedirectUrlManagementController.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Api.Management.Factories;
-using Umbraco.Cms.Api.Management.ViewModels.RedirectUrlManagement;
-
-namespace Umbraco.Cms.Api.Management.Controllers.RedirectUrlManagement;
-
-public class GetStatusRedirectUrlManagementController : RedirectUrlManagementBaseController
-{
- private readonly IRedirectUrlStatusViewModelFactory _redirectUrlStatusViewModelFactory;
-
- public GetStatusRedirectUrlManagementController(
- IRedirectUrlStatusViewModelFactory redirectUrlStatusViewModelFactory) =>
- _redirectUrlStatusViewModelFactory = redirectUrlStatusViewModelFactory;
-
- [HttpGet("status")]
- [ProducesResponseType(typeof(RedirectUrlStatusViewModel), 200)]
- public Task> GetStatus() =>
- Task.FromResult>(_redirectUrlStatusViewModelFactory.CreateViewModel());
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/RedirectUrlManagement/RedirectUrlManagementBaseController.cs b/src/Umbraco.Cms.Api.Management/Controllers/RedirectUrlManagement/RedirectUrlManagementBaseController.cs
deleted file mode 100644
index 0c8cc74822..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/RedirectUrlManagement/RedirectUrlManagementBaseController.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.RedirectUrlManagement;
-
-[ApiController]
-[VersionedApiBackOfficeRoute("redirect-management")]
-[ApiExplorerSettings(GroupName = "Redirect Management")]
-[ApiVersion("1.0")]
-public class RedirectUrlManagementBaseController : ManagementApiControllerBase
-{
-
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/RedirectUrlManagement/SetStatusRedirectUrlManagementController.cs b/src/Umbraco.Cms.Api.Management/Controllers/RedirectUrlManagement/SetStatusRedirectUrlManagementController.cs
deleted file mode 100644
index d51e91a08d..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/RedirectUrlManagement/SetStatusRedirectUrlManagementController.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Configuration;
-using Umbraco.Cms.Core.Security;
-using Umbraco.New.Cms.Core.Models.RedirectUrlManagement;
-
-namespace Umbraco.Cms.Api.Management.Controllers.RedirectUrlManagement;
-
-public class SetStatusRedirectUrlManagementController : RedirectUrlManagementBaseController
-{
- private readonly IBackOfficeSecurityAccessor _backOfficeSecurityAccessor;
- private readonly IConfigManipulator _configManipulator;
-
- public SetStatusRedirectUrlManagementController(
- IBackOfficeSecurityAccessor backOfficeSecurityAccessor,
- IConfigManipulator configManipulator)
- {
- _backOfficeSecurityAccessor = backOfficeSecurityAccessor;
- _configManipulator = configManipulator;
- }
-
- // TODO: Consider if we should even allow this, or only allow using the appsettings
- // We generally don't want to edit the appsettings from our code.
- // But maybe there is a valid use case for doing it on the fly.
- [HttpPost("status")]
- public async Task SetStatus([FromQuery] RedirectStatus status)
- {
- // TODO: uncomment this when auth is implemented.
- // var userIsAdmin = _backOfficeSecurityAccessor.BackOfficeSecurity?.CurrentUser?.IsAdmin();
- // if (userIsAdmin is null or false)
- // {
- // return Unauthorized();
- // }
-
- var enable = status switch
- {
- RedirectStatus.Enabled => true,
- RedirectStatus.Disabled => false
- };
-
- // For now I'm not gonna change this to limit breaking, but it's weird to have a "disabled" switch,
- // since you're essentially negating the boolean from the get go,
- // it's much easier to reason with enabled = false == disabled.
- _configManipulator.SaveDisableRedirectUrlTracking(!enable);
-
- // Taken from the existing implementation in RedirectUrlManagementController
- // TODO this is ridiculous, but we need to ensure the configuration is reloaded, before this request is ended.
- // otherwise we can read the old value in GetEnableState.
- // The value is equal to JsonConfigurationSource.ReloadDelay
- Thread.Sleep(250);
-
- return Ok();
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Relation/ByChildRelationController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Relation/ByChildRelationController.cs
deleted file mode 100644
index c6153d5639..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Relation/ByChildRelationController.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.Factories;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-using Umbraco.Cms.Api.Management.ViewModels.Relation;
-using Umbraco.Extensions;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Relation;
-
-public class ByChildRelationController : RelationControllerBase
-{
- private readonly IRelationService _relationService;
- private readonly IRelationViewModelFactory _relationViewModelFactory;
-
- public ByChildRelationController(
- IRelationService relationService,
- IRelationViewModelFactory relationViewModelFactory)
- {
- _relationService = relationService;
- _relationViewModelFactory = relationViewModelFactory;
- }
-
- [HttpGet("child-relation/{childId:int}")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task> ByChild(int childId, int skip, int take, string? relationTypeAlias = "")
- {
- IRelation[] relations = _relationService.GetByChildId(childId).ToArray();
- RelationViewModel[] result = Array.Empty();
-
- if (relations.Any())
- {
- if (string.IsNullOrWhiteSpace(relationTypeAlias) == false)
- {
- result = _relationViewModelFactory.CreateMultiple(relations.Where(x =>
- x.RelationType.Alias.InvariantEquals(relationTypeAlias))).ToArray();
- }
- else
- {
- result = _relationViewModelFactory.CreateMultiple(relations).ToArray();
- }
- }
-
- return await Task.FromResult(new PagedViewModel
- {
- Total = result.Length,
- Items = result.Skip(skip).Take(take),
- });
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Relation/ByIdRelationController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Relation/ByIdRelationController.cs
deleted file mode 100644
index a9ac8cf0cd..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Relation/ByIdRelationController.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.Factories;
-using Umbraco.Cms.Api.Management.ViewModels.Relation;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Relation;
-
-public class ByIdRelationController : RelationControllerBase
-{
- private readonly IRelationService _relationService;
- private readonly IRelationViewModelFactory _relationViewModelFactory;
-
- public ByIdRelationController(IRelationService relationService, IRelationViewModelFactory relationViewModelFactory)
- {
- _relationService = relationService;
- _relationViewModelFactory = relationViewModelFactory;
- }
-
- [HttpGet("{id:int}")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(RelationViewModel), StatusCodes.Status200OK)]
- [ProducesResponseType(typeof(NotFoundResult), StatusCodes.Status404NotFound)]
- public async Task ById(int id)
- {
- IRelation? relation = _relationService.GetById(id);
- if (relation is null)
- {
- return NotFound();
- }
-
- return await Task.FromResult(Ok(_relationViewModelFactory.Create(relation)));
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Relation/RelationControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Relation/RelationControllerBase.cs
deleted file mode 100644
index 4c0f525898..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Relation/RelationControllerBase.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Relation;
-
-[ApiController]
-[VersionedApiBackOfficeRoute("relation")]
-[ApiExplorerSettings(GroupName = "Relation")]
-[ApiVersion("1.0")]
-// TODO: Implement Authentication
-public abstract class RelationControllerBase : ManagementApiControllerBase
-{
-
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/RelationType/Tree/ItemsRelationTypeTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/RelationType/Tree/ItemsRelationTypeTreeController.cs
deleted file mode 100644
index 8271d80706..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/RelationType/Tree/ItemsRelationTypeTreeController.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.RelationType.Tree;
-
-public class ItemsRelationTypeTreeController : RelationTypeTreeControllerBase
-{
- private readonly IRelationService _relationService;
-
- public ItemsRelationTypeTreeController(IEntityService entityService, IRelationService relationService)
- : base(entityService) =>
- _relationService = relationService;
-
- [HttpGet("item")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)]
- public async Task>> Items([FromQuery(Name = "key")] Guid[] keys)
- {
- // relation service does not allow fetching a collection of relation types by their ids; instead it relies
- // heavily on caching, which means this is as fast as it gets - even if it looks less than performant
- IRelationType[] relationTypes = _relationService
- .GetAllRelationTypes()
- .Where(relationType => keys.Contains(relationType.Key)).ToArray();
-
- EntityTreeItemViewModel[] viewModels = MapTreeItemViewModels(null, relationTypes);
-
- return await Task.FromResult(Ok(viewModels));
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/RelationType/Tree/RelationTypeTreeControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/RelationType/Tree/RelationTypeTreeControllerBase.cs
deleted file mode 100644
index 10d53ffcbb..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/RelationType/Tree/RelationTypeTreeControllerBase.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.Controllers.Tree;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.RelationType.Tree;
-
-[ApiVersion("1.0")]
-[ApiController]
-[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Tree}/{Constants.UdiEntityType.RelationType}")]
-[ApiExplorerSettings(GroupName = "Relation Type")]
-// NOTE: at the moment relation types aren't supported by EntityService, so we have little use of the
-// tree controller base. We'll keep it though, in the hope that we can mend EntityService.
-public class RelationTypeTreeControllerBase : EntityTreeControllerBase
-{
- public RelationTypeTreeControllerBase(IEntityService entityService)
- : base(entityService)
- {
- }
-
- protected override UmbracoObjectTypes ItemObjectType => UmbracoObjectTypes.RelationType;
-
- protected EntityTreeItemViewModel[] MapTreeItemViewModels(Guid? parentKey, IRelationType[] relationTypes)
- => relationTypes.Select(relationType => new EntityTreeItemViewModel
- {
- Icon = Constants.Icons.RelationType,
- Name = relationType.Name!,
- Key = relationType.Key,
- Type = Constants.UdiEntityType.RelationType,
- HasChildren = false,
- IsContainer = false,
- ParentKey = parentKey
- }).ToArray();
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/RelationType/Tree/RootRelationTypeTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/RelationType/Tree/RootRelationTypeTreeController.cs
deleted file mode 100644
index c7d3e122b4..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/RelationType/Tree/RootRelationTypeTreeController.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.Services.Paging;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.RelationType.Tree;
-
-public class RootRelationTypeTreeController : RelationTypeTreeControllerBase
-{
- private readonly IRelationService _relationService;
-
- public RootRelationTypeTreeController(IEntityService entityService, IRelationService relationService)
- : base(entityService) =>
- _relationService = relationService;
-
- [HttpGet("root")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Root(int skip = 0, int take = 100)
- {
- if (PaginationService.ConvertSkipTakeToPaging(skip, take, out var pageNumber, out var pageSize, out ProblemDetails? error) == false)
- {
- return BadRequest(error);
- }
-
- // pagination is not supported (yet) by relation service, so we do it in memory for now
- // - chances are we won't have many relation types, so it won't be an actual issue
- IRelationType[] allRelationTypes = _relationService.GetAllRelationTypes().ToArray();
-
- EntityTreeItemViewModel[] viewModels = MapTreeItemViewModels(
- null,
- allRelationTypes
- .OrderBy(relationType => relationType.Name)
- .Skip((int)(pageNumber * pageSize))
- .Take(pageSize)
- .ToArray());
-
- PagedViewModel result = PagedViewModel(viewModels, allRelationTypes.Length);
- return await Task.FromResult(Ok(result));
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Script/Tree/ChildrenScriptTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Script/Tree/ChildrenScriptTreeController.cs
deleted file mode 100644
index 53974b3575..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Script/Tree/ChildrenScriptTreeController.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.IO;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Script.Tree;
-
-public class ChildrenScriptTreeController : ScriptTreeControllerBase
-{
- public ChildrenScriptTreeController(FileSystems fileSystems)
- : base(fileSystems)
- {
- }
-
- [HttpGet("children")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Children(string path, int skip = 0, int take = 100)
- => await GetChildren(path, skip, take);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Script/Tree/ItemsScriptTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Script/Tree/ItemsScriptTreeController.cs
deleted file mode 100644
index 4db18a409b..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Script/Tree/ItemsScriptTreeController.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.IO;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Script.Tree;
-
-public class ItemsScriptTreeController : ScriptTreeControllerBase
-{
- public ItemsScriptTreeController(FileSystems fileSystems)
- : base(fileSystems)
- {
- }
-
- [HttpGet("item")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)]
- public async Task>> Items([FromQuery(Name = "path")] string[] paths)
- => await GetItems(paths);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Script/Tree/RootScriptTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Script/Tree/RootScriptTreeController.cs
deleted file mode 100644
index d04525daa4..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Script/Tree/RootScriptTreeController.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.IO;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Script.Tree;
-
-public class RootScriptTreeController : ScriptTreeControllerBase
-{
- public RootScriptTreeController(FileSystems fileSystems)
- : base(fileSystems)
- {
- }
-
- [HttpGet("root")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Root(int skip = 0, int take = 100)
- => await GetRoot(skip, take);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Script/Tree/ScriptTreeControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Script/Tree/ScriptTreeControllerBase.cs
deleted file mode 100644
index d5206e1734..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Script/Tree/ScriptTreeControllerBase.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core;
-using Umbraco.Cms.Core.IO;
-using Umbraco.Cms.Api.Management.Controllers.Tree;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Script.Tree;
-
-[ApiVersion("1.0")]
-[ApiController]
-[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Tree}/{Constants.UdiEntityType.Script}")]
-[ApiExplorerSettings(GroupName = nameof(Constants.UdiEntityType.Script))]
-public class ScriptTreeControllerBase : FileSystemTreeControllerBase
-{
- public ScriptTreeControllerBase(FileSystems fileSystems)
- => FileSystem = fileSystems.ScriptsFileSystem ??
- throw new ArgumentException("Missing scripts file system", nameof(fileSystems));
-
- protected override IFileSystem FileSystem { get; }
-
- protected override string FileIcon(string path) => Constants.Icons.Script;
-
- protected override string ItemType(string path) => Constants.UdiEntityType.Script;
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Searcher/AllSearcherController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Searcher/AllSearcherController.cs
deleted file mode 100644
index c4cf3863bb..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Searcher/AllSearcherController.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-using Examine;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-using Umbraco.Cms.Api.Management.ViewModels.Search;
-using Umbraco.Extensions;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Searcher;
-
-[ApiVersion("1.0")]
-public class AllSearcherController : SearcherControllerBase
-{
- private readonly IExamineManager _examineManager;
-
- public AllSearcherController(IExamineManager examineManager) => _examineManager = examineManager;
-
- ///
- /// Get the details for searchers
- ///
- ///
- [HttpGet]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> All(int skip, int take)
- {
- var searchers = new List(
- _examineManager.RegisteredSearchers.Select(searcher => new SearcherViewModel { Name = searcher.Name })
- .OrderBy(x =>
- x.Name.TrimEnd("Searcher"))); // order by name , but strip the "Searcher" from the end if it exists
- var viewModel = new PagedViewModel
- {
- Items = searchers.Skip(skip).Take(take),
- Total = searchers.Count,
- };
-
- return await Task.FromResult(Ok(viewModel));
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Searcher/QuerySearcherController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Searcher/QuerySearcherController.cs
deleted file mode 100644
index ac34444fcb..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Searcher/QuerySearcherController.cs
+++ /dev/null
@@ -1,80 +0,0 @@
-using Examine;
-using Examine.Search;
-using Lucene.Net.QueryParsers.Classic;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Api.Management.Services;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-using Umbraco.Cms.Api.Management.ViewModels.Search;
-using Umbraco.Extensions;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Searcher;
-
-[ApiVersion("1.0")]
-public class QuerySearcherController : SearcherControllerBase
-{
- private readonly IExamineManagerService _examineManagerService;
-
- public QuerySearcherController(IExamineManagerService examineManagerService) => _examineManagerService = examineManagerService;
-
- [HttpGet("{searcherName}/query")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status404NotFound)]
- public async Task>> Query(string searcherName, string? term, int skip, int take)
- {
- term = term?.Trim();
-
- if (term.IsNullOrWhiteSpace())
- {
- return new PagedViewModel();
- }
-
- if (!_examineManagerService.TryFindSearcher(searcherName, out ISearcher searcher))
- {
- var invalidModelProblem = new ProblemDetails
- {
- Title = "Could not find a valid searcher",
- Detail = "The provided searcher name did not match any of our registered searchers",
- Status = StatusCodes.Status404NotFound,
- Type = "Error",
- };
-
- return NotFound(invalidModelProblem);
- }
-
- ISearchResults results;
-
- // NativeQuery will work for a single word/phrase too (but depends on the implementation) the lucene one will work.
- try
- {
- results = searcher
- .CreateQuery()
- .NativeQuery(term)
- .Execute(QueryOptions.SkipTake(skip, take));
- }
- catch (ParseException)
- {
- var invalidModelProblem = new ProblemDetails
- {
- Title = "Could not parse the query",
- Detail = "Parser could not parse the query. Please double check if the query is valid. Sometimes this can also happen if your query starts with a wildcard (*)",
- Status = StatusCodes.Status404NotFound,
- Type = "Error",
- };
-
- return BadRequest(invalidModelProblem);
- }
-
- return await Task.FromResult(new PagedViewModel
- {
- Total = results.TotalItemCount,
- Items = results.Select(x => new SearchResultViewModel
- {
- Id = x.Id,
- Score = x.Score,
- Fields = x.AllValues.OrderBy(y => y.Key).Select(y => new FieldViewModel { Name = y.Key, Values = y.Value }),
- }),
- });
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Searcher/SearcherControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Searcher/SearcherControllerBase.cs
deleted file mode 100644
index d27fe28826..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Searcher/SearcherControllerBase.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Searcher;
-
-[ApiController]
-[VersionedApiBackOfficeRoute("searcher")]
-[ApiExplorerSettings(GroupName = "Searcher")]
-public class SearcherControllerBase : ManagementApiControllerBase
-{
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Security/BackOfficeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Security/BackOfficeController.cs
deleted file mode 100644
index a7731e1f46..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Security/BackOfficeController.cs
+++ /dev/null
@@ -1,144 +0,0 @@
-using System.Security.Claims;
-using Microsoft.AspNetCore;
-using Microsoft.AspNetCore.Authentication;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Identity;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.Options;
-using OpenIddict.Abstractions;
-using OpenIddict.Server.AspNetCore;
-using Umbraco.Cms.Core;
-using Umbraco.Cms.Core.Configuration.Models;
-using Umbraco.Cms.Core.Security;
-using Umbraco.Cms.Web.BackOffice.Security;
-using Umbraco.Extensions;
-using Umbraco.Cms.Api.Management.Routing;
-using SignInResult = Microsoft.AspNetCore.Mvc.SignInResult;
-using IdentitySignInResult = Microsoft.AspNetCore.Identity.SignInResult;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Security;
-
-[ApiController]
-[VersionedApiBackOfficeRoute(Paths.BackOfficeApiEndpointTemplate)]
-[ApiExplorerSettings(GroupName = "Security")]
-public class BackOfficeController : ManagementApiControllerBase
-{
- private readonly IHttpContextAccessor _httpContextAccessor;
- private readonly IBackOfficeSignInManager _backOfficeSignInManager;
- private readonly IBackOfficeUserManager _backOfficeUserManager;
- private readonly IOptions _securitySettings;
-
- public BackOfficeController(
- IHttpContextAccessor httpContextAccessor,
- IBackOfficeSignInManager backOfficeSignInManager,
- IBackOfficeUserManager backOfficeUserManager,
- IOptions securitySettings)
- {
- _httpContextAccessor = httpContextAccessor;
- _backOfficeSignInManager = backOfficeSignInManager;
- _backOfficeUserManager = backOfficeUserManager;
- _securitySettings = securitySettings;
- }
-
- [HttpGet("authorize")]
- [HttpPost("authorize")]
- [MapToApiVersion("1.0")]
- public async Task Authorize()
- {
- HttpContext context = _httpContextAccessor.GetRequiredHttpContext();
- OpenIddictRequest? request = context.GetOpenIddictServerRequest();
- if (request == null)
- {
- return BadRequest("Unable to obtain OpenID data from the current request");
- }
-
- return request.IdentityProvider.IsNullOrWhiteSpace()
- ? await AuthorizeInternal(request)
- : await AuthorizeExternal(request);
- }
-
- private async Task AuthorizeInternal(OpenIddictRequest request)
- {
- // TODO: ensure we handle sign-in notifications for internal logins.
- // when the new login screen is implemented for internal logins, make sure it still handles
- // user sign-in notifications (calls BackOfficeSignInManager.HandleSignIn) as part of the
- // sign-in process
- // for future reference, notifications are already handled for the external login flow by
- // by calling BackOfficeSignInManager.ExternalLoginSignInAsync
-
- // retrieve the user principal stored in the authentication cookie.
- AuthenticateResult cookieAuthResult = await HttpContext.AuthenticateAsync(Constants.Security.BackOfficeAuthenticationType);
- var userName = cookieAuthResult.Succeeded
- ? cookieAuthResult.Principal?.Identity?.Name
- : null;
-
- if (userName != null)
- {
- BackOfficeIdentityUser? backOfficeUser = await _backOfficeUserManager.FindByNameAsync(userName);
- if (backOfficeUser != null)
- {
- return await SignInBackOfficeUser(backOfficeUser, request);
- }
- }
-
- return DefaultChallengeResult();
- }
-
- private async Task AuthorizeExternal(OpenIddictRequest request)
- {
- var provider = request.IdentityProvider ?? throw new ArgumentException("No identity provider found in request", nameof(request));
-
- ExternalLoginInfo? loginInfo = await _backOfficeSignInManager.GetExternalLoginInfoAsync();
- if (loginInfo?.Principal != null)
- {
- IdentitySignInResult result = await _backOfficeSignInManager.ExternalLoginSignInAsync(loginInfo, false, _securitySettings.Value.UserBypassTwoFactorForExternalLogins);
-
- if (result.Succeeded)
- {
- // Update any authentication tokens if succeeded
- await _backOfficeSignInManager.UpdateExternalAuthenticationTokensAsync(loginInfo);
-
- // sign in the backoffice user associated with the login provider and unique provider key
- BackOfficeIdentityUser? backOfficeUser = await _backOfficeUserManager.FindByLoginAsync(loginInfo.LoginProvider, loginInfo.ProviderKey);
- if (backOfficeUser != null)
- {
- return await SignInBackOfficeUser(backOfficeUser, request);
- }
- }
- else
- {
- // avoid infinite auth loops when something fails by performing the default challenge (default login screen)
- return DefaultChallengeResult();
- }
- }
-
- AuthenticationProperties properties = _backOfficeSignInManager.ConfigureExternalAuthenticationProperties(provider, null);
- return new ChallengeResult(provider, properties);
- }
-
- private async Task SignInBackOfficeUser(BackOfficeIdentityUser backOfficeUser, OpenIddictRequest request)
- {
- ClaimsPrincipal backOfficePrincipal = await _backOfficeSignInManager.CreateUserPrincipalAsync(backOfficeUser);
- backOfficePrincipal.SetClaim(OpenIddictConstants.Claims.Subject, backOfficeUser.Key.ToString());
-
- // TODO: it is not optimal to append all claims to the token.
- // the token size grows with each claim, although it is still smaller than the old cookie.
- // see if we can find a better way so we do not risk leaking sensitive data in bearer tokens.
- // maybe work with scopes instead?
- Claim[] backOfficeClaims = backOfficePrincipal.Claims.ToArray();
- foreach (Claim backOfficeClaim in backOfficeClaims)
- {
- backOfficeClaim.SetDestinations(OpenIddictConstants.Destinations.AccessToken);
- }
-
- if (request.GetScopes().Contains(OpenIddictConstants.Scopes.OfflineAccess))
- {
- // "offline_access" scope is required to use refresh tokens
- backOfficePrincipal.SetScopes(OpenIddictConstants.Scopes.OfflineAccess);
- }
-
- return new SignInResult(OpenIddictServerAspNetCoreDefaults.AuthenticationScheme, backOfficePrincipal);
- }
-
- private static IActionResult DefaultChallengeResult() => new ChallengeResult(Constants.Security.BackOfficeAuthenticationType);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Security/Paths.cs b/src/Umbraco.Cms.Api.Management/Controllers/Security/Paths.cs
deleted file mode 100644
index ee527c85e2..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Security/Paths.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-namespace Umbraco.Cms.Api.Management.Controllers.Security;
-
-public static class Paths
-{
- public const string BackOfficeApiEndpointTemplate = "security/back-office";
-
- public static readonly string BackOfficeApiAuthorizationEndpoint = BackOfficeApiEndpointPath($"{BackOfficeApiEndpointTemplate}/authorize");
-
- public static readonly string BackOfficeApiTokenEndpoint = BackOfficeApiEndpointPath($"{BackOfficeApiEndpointTemplate}/token");
-
- private static string BackOfficeApiEndpointPath(string relativePath) => $"/umbraco/management/api/v1.0/{relativePath}";
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Server/ServerControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Server/ServerControllerBase.cs
deleted file mode 100644
index 646f1f6996..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Server/ServerControllerBase.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Server;
-
-[ApiController]
-[VersionedApiBackOfficeRoute("server")]
-[ApiExplorerSettings(GroupName = "Server")]
-public abstract class ServerControllerBase : ManagementApiControllerBase
-{
-
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Server/StatusServerController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Server/StatusServerController.cs
deleted file mode 100644
index f11147fdbb..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Server/StatusServerController.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.ViewModels.Server;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Server;
-
-[ApiVersion("1.0")]
-public class StatusServerController : ServerControllerBase
-{
- private readonly IRuntimeState _runtimeState;
-
- public StatusServerController(IRuntimeState runtimeState) => _runtimeState = runtimeState;
-
- [HttpGet("status")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
- [ProducesResponseType(typeof(ServerStatusViewModel), StatusCodes.Status200OK)]
- public async Task> Get() =>
- await Task.FromResult(new ServerStatusViewModel { ServerStatus = _runtimeState.Level });
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Server/VersionServerController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Server/VersionServerController.cs
deleted file mode 100644
index bb9ce5846e..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Server/VersionServerController.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Configuration;
-using Umbraco.Cms.Api.Management.ViewModels.Server;
-using Umbraco.Extensions;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Server;
-
-[ApiVersion("1.0")]
-public class VersionServerController : ServerControllerBase
-{
- private readonly IUmbracoVersion _umbracoVersion;
-
- public VersionServerController(IUmbracoVersion umbracoVersion) => _umbracoVersion = umbracoVersion;
-
- [HttpGet("version")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
- [ProducesResponseType(typeof(VersionViewModel), StatusCodes.Status200OK)]
- public async Task> Get() =>
- await Task.FromResult(new VersionViewModel
- {
- Version = _umbracoVersion.SemanticVersion.ToSemanticStringWithoutBuild()
- });
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/StaticFile/Tree/ChildrenStaticFileTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/StaticFile/Tree/ChildrenStaticFileTreeController.cs
deleted file mode 100644
index 826d2b3103..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/StaticFile/Tree/ChildrenStaticFileTreeController.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.IO;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.StaticFile.Tree;
-
-public class ChildrenStaticFileTreeController : StaticFileTreeControllerBase
-{
- public ChildrenStaticFileTreeController(IPhysicalFileSystem physicalFileSystem)
- : base(physicalFileSystem)
- {
- }
-
- [HttpGet("children")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Children(string path, int skip = 0, int take = 100)
- => await GetChildren(path, skip, take);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/StaticFile/Tree/ItemsStaticFileTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/StaticFile/Tree/ItemsStaticFileTreeController.cs
deleted file mode 100644
index 78d63d9143..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/StaticFile/Tree/ItemsStaticFileTreeController.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.IO;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.StaticFile.Tree;
-
-public class ItemsStaticFileTreeController : StaticFileTreeControllerBase
-{
- public ItemsStaticFileTreeController(IPhysicalFileSystem physicalFileSystem)
- : base(physicalFileSystem)
- {
- }
-
- [HttpGet("item")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)]
- public async Task>> Items([FromQuery(Name = "path")] string[] paths)
- => await GetItems(paths);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/StaticFile/Tree/RootStaticFileTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/StaticFile/Tree/RootStaticFileTreeController.cs
deleted file mode 100644
index 48d4cacc4d..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/StaticFile/Tree/RootStaticFileTreeController.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.IO;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.StaticFile.Tree;
-
-public class RootStaticFileTreeController : StaticFileTreeControllerBase
-{
- public RootStaticFileTreeController(IPhysicalFileSystem physicalFileSystem)
- : base(physicalFileSystem)
- {
- }
-
- [HttpGet("root")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Root(int skip = 0, int take = 100)
- => await GetRoot(skip, take);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/StaticFile/Tree/StaticFileTreeControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/StaticFile/Tree/StaticFileTreeControllerBase.cs
deleted file mode 100644
index aed2042255..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/StaticFile/Tree/StaticFileTreeControllerBase.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core;
-using Umbraco.Cms.Core.IO;
-using Umbraco.Cms.Api.Management.Controllers.Tree;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.StaticFile.Tree;
-
-[ApiVersion("1.0")]
-[ApiController]
-[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Tree}/static-file")]
-[ApiExplorerSettings(GroupName = "Static File")]
-public class StaticFileTreeControllerBase : FileSystemTreeControllerBase
-{
- private static readonly string[] _allowedRootFolders = { "App_Plugins", "wwwroot" };
-
- public StaticFileTreeControllerBase(IPhysicalFileSystem physicalFileSystem)
- => FileSystem = physicalFileSystem;
-
- protected override IFileSystem FileSystem { get; }
-
- protected override string FileIcon(string path) => Constants.Icons.DefaultIcon;
-
- protected override string ItemType(string path) => "static-file";
-
- protected override string[] GetDirectories(string path) =>
- IsTreeRootPath(path)
- ? _allowedRootFolders
- : IsAllowedPath(path)
- ? base.GetDirectories(path)
- : Array.Empty();
-
- protected override string[] GetFiles(string path)
- => IsTreeRootPath(path) || IsAllowedPath(path) == false
- ? Array.Empty()
- : base.GetFiles(path);
-
- private bool IsTreeRootPath(string path) => string.IsNullOrWhiteSpace(path);
-
- private bool IsAllowedPath(string path) => _allowedRootFolders.Contains(path) || _allowedRootFolders.Any(folder => path.StartsWith($"{folder}/"));
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Stylesheet/Tree/ChildrenStylesheetTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Stylesheet/Tree/ChildrenStylesheetTreeController.cs
deleted file mode 100644
index 8e6a0022d4..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Stylesheet/Tree/ChildrenStylesheetTreeController.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.IO;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Stylesheet.Tree;
-
-public class ChildrenStylesheetTreeController : StylesheetTreeControllerBase
-{
- public ChildrenStylesheetTreeController(FileSystems fileSystems)
- : base(fileSystems)
- {
- }
-
- [HttpGet("children")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Children(string path, int skip = 0, int take = 100)
- => await GetChildren(path, skip, take);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Stylesheet/Tree/ItemsStylesheetTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Stylesheet/Tree/ItemsStylesheetTreeController.cs
deleted file mode 100644
index ff54931403..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Stylesheet/Tree/ItemsStylesheetTreeController.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.IO;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Stylesheet.Tree;
-
-public class ItemsStylesheetTreeController : StylesheetTreeControllerBase
-{
- public ItemsStylesheetTreeController(FileSystems fileSystems)
- : base(fileSystems)
- {
- }
-
- [HttpGet("item")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)]
- public async Task>> Items([FromQuery(Name = "path")] string[] paths)
- => await GetItems(paths);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Stylesheet/Tree/RootStylesheetTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Stylesheet/Tree/RootStylesheetTreeController.cs
deleted file mode 100644
index cb8ca07d75..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Stylesheet/Tree/RootStylesheetTreeController.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.IO;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Stylesheet.Tree;
-
-public class RootStylesheetTreeController : StylesheetTreeControllerBase
-{
- public RootStylesheetTreeController(FileSystems fileSystems)
- : base(fileSystems)
- {
- }
-
- [HttpGet("root")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Root(int skip = 0, int take = 100)
- => await GetRoot(skip, take);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Stylesheet/Tree/StylesheetTreeControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Stylesheet/Tree/StylesheetTreeControllerBase.cs
deleted file mode 100644
index 905d31bb1f..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Stylesheet/Tree/StylesheetTreeControllerBase.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core;
-using Umbraco.Cms.Core.IO;
-using Umbraco.Cms.Api.Management.Controllers.Tree;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Stylesheet.Tree;
-
-[ApiVersion("1.0")]
-[ApiController]
-[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Tree}/{Constants.UdiEntityType.Stylesheet}")]
-[ApiExplorerSettings(GroupName = nameof(Constants.UdiEntityType.Stylesheet))]
-public class StylesheetTreeControllerBase : FileSystemTreeControllerBase
-{
- public StylesheetTreeControllerBase(FileSystems fileSystems)
- => FileSystem = fileSystems.StylesheetsFileSystem ??
- throw new ArgumentException("Missing stylesheets file system", nameof(fileSystems));
-
- protected override IFileSystem FileSystem { get; }
-
- protected override string FileIcon(string path) => Constants.Icons.Stylesheet;
-
- protected override string ItemType(string path) => Constants.UdiEntityType.Stylesheet;
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Telemetry/AllTelemetryController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Telemetry/AllTelemetryController.cs
deleted file mode 100644
index 2ad72017fa..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Telemetry/AllTelemetryController.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-using Umbraco.Cms.Api.Management.ViewModels.Telemetry;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Telemetry;
-
-public class AllTelemetryController : TelemetryControllerBase
-{
- [HttpGet]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task> GetAll(int skip, int take)
- {
- TelemetryLevel[] levels = Enum.GetValues();
- return await Task.FromResult(new PagedViewModel
- {
- Total = levels.Length,
- Items = levels.Skip(skip).Take(take).Select(level => new TelemetryViewModel { TelemetryLevel = level }),
- });
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Telemetry/GetTelemetryController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Telemetry/GetTelemetryController.cs
deleted file mode 100644
index 52a4a47d06..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Telemetry/GetTelemetryController.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.ViewModels.Telemetry;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Telemetry;
-
-public class GetTelemetryController : TelemetryControllerBase
-{
- private readonly IMetricsConsentService _metricsConsentService;
-
- public GetTelemetryController(IMetricsConsentService metricsConsentService) => _metricsConsentService = metricsConsentService;
-
- [HttpGet("level")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(TelemetryViewModel), StatusCodes.Status200OK)]
- public async Task Get() => await Task.FromResult(new TelemetryViewModel { TelemetryLevel = _metricsConsentService.GetConsentLevel() });
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Telemetry/SetTelemetryController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Telemetry/SetTelemetryController.cs
deleted file mode 100644
index 0667c7df3b..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Telemetry/SetTelemetryController.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.ViewModels.Telemetry;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Telemetry;
-
-public class SetTelemetryController : TelemetryControllerBase
-{
- private readonly IMetricsConsentService _metricsConsentService;
-
- public SetTelemetryController(IMetricsConsentService metricsConsentService) => _metricsConsentService = metricsConsentService;
-
- [HttpPost("level")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
- [ProducesResponseType(StatusCodes.Status200OK)]
- public async Task SetConsentLevel(TelemetryViewModel telemetryViewModel)
- {
- if (!Enum.IsDefined(telemetryViewModel.TelemetryLevel))
- {
- var invalidModelProblem = new ProblemDetails
- {
- Title = "Invalid TelemetryLevel value",
- Detail = "The provided value for TelemetryLevel is not valid",
- Status = StatusCodes.Status400BadRequest,
- Type = "Error",
- };
- return BadRequest(invalidModelProblem);
- }
-
- _metricsConsentService.SetConsentLevel(telemetryViewModel.TelemetryLevel);
- return await Task.FromResult(Ok());
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Telemetry/TelemetryControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Telemetry/TelemetryControllerBase.cs
deleted file mode 100644
index bb65bf1b85..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Telemetry/TelemetryControllerBase.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Telemetry;
-
-[ApiController]
-[VersionedApiBackOfficeRoute("telemetry")]
-[ApiExplorerSettings(GroupName = "Telemetry")]
-[ApiVersion("1.0")]
-public abstract class TelemetryControllerBase : ManagementApiControllerBase
-{
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Template/Tree/ChildrenTemplateTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Template/Tree/ChildrenTemplateTreeController.cs
deleted file mode 100644
index 19968927a2..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Template/Tree/ChildrenTemplateTreeController.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-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.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Template.Tree;
-
-public class ChildrenTemplateTreeController : TemplateTreeControllerBase
-{
- public ChildrenTemplateTreeController(IEntityService entityService)
- : base(entityService)
- {
- }
-
- [HttpGet("children")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Children(Guid parentKey, int skip = 0, int take = 100)
- => await GetChildren(parentKey, skip, take);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Template/Tree/ItemsTemplateTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Template/Tree/ItemsTemplateTreeController.cs
deleted file mode 100644
index 63a8e0cf22..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Template/Tree/ItemsTemplateTreeController.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Management.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Template.Tree;
-
-public class ItemsTemplateTreeController : TemplateTreeControllerBase
-{
- public ItemsTemplateTreeController(IEntityService entityService)
- : base(entityService)
- {
- }
-
- [HttpGet("item")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)]
- public async Task>> Items([FromQuery(Name = "key")] Guid[] keys)
- => await GetItems(keys);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Template/Tree/RootTemplateTreeController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Template/Tree/RootTemplateTreeController.cs
deleted file mode 100644
index 50efa34e4f..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Template/Tree/RootTemplateTreeController.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-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.ViewModels.Tree;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Template.Tree;
-
-public class RootTemplateTreeController : TemplateTreeControllerBase
-{
- public RootTemplateTreeController(IEntityService entityService)
- : base(entityService)
- {
- }
-
- [HttpGet("root")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Root(int skip = 0, int take = 100)
- => await GetRoot(skip, take);
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Template/Tree/TemplateTreeControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Template/Tree/TemplateTreeControllerBase.cs
deleted file mode 100644
index d1c0ce5271..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/Template/Tree/TemplateTreeControllerBase.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core;
-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.ViewModels.Tree;
-using Umbraco.Cms.Api.Management.Routing;
-
-namespace Umbraco.Cms.Api.Management.Controllers.Template.Tree;
-
-[ApiVersion("1.0")]
-[ApiController]
-[VersionedApiBackOfficeRoute($"{Constants.Web.RoutePath.Tree}/{Constants.UdiEntityType.Template}")]
-[ApiExplorerSettings(GroupName = nameof(Constants.UdiEntityType.Template))]
-public class TemplateTreeControllerBase : EntityTreeControllerBase
-{
- public TemplateTreeControllerBase(IEntityService entityService)
- : base(entityService)
- {
- }
-
- protected override UmbracoObjectTypes ItemObjectType => UmbracoObjectTypes.Template;
-
- protected override EntityTreeItemViewModel MapTreeItemViewModel(Guid? parentKey, IEntitySlim entity)
- {
- EntityTreeItemViewModel viewModel = base.MapTreeItemViewModel(parentKey, entity);
- viewModel.Icon = Constants.Icons.Template;
- return viewModel;
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/TrackedReference/ByIdTrackedReferenceController.cs b/src/Umbraco.Cms.Api.Management/Controllers/TrackedReference/ByIdTrackedReferenceController.cs
deleted file mode 100644
index 39d2cfe3c2..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/TrackedReference/ByIdTrackedReferenceController.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Mapping;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-using Umbraco.Cms.Api.Management.ViewModels.TrackedReferences;
-using Umbraco.New.Cms.Core.Models;
-
-namespace Umbraco.Cms.Api.Management.Controllers.TrackedReference;
-
-public class ByIdTrackedReferenceController : TrackedReferenceControllerBase
-{
- private readonly ITrackedReferencesService _trackedReferencesService;
- private readonly IUmbracoMapper _umbracoMapper;
-
- public ByIdTrackedReferenceController(ITrackedReferencesService trackedReferencesService, IUmbracoMapper umbracoMapper)
- {
- _trackedReferencesService = trackedReferencesService;
- _umbracoMapper = umbracoMapper;
- }
-
- ///
- /// Gets a page list of tracked references for the current item, so you can see where an item is being used.
- ///
- ///
- /// Used by info tabs on content, media etc. and for the delete and unpublish of single items.
- /// This is basically finding parents of relations.
- ///
- [HttpGet("{id:int}")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Get(
- int id,
- long skip,
- long take,
- bool? filterMustBeIsDependency)
- {
- PagedModel relationItems = _trackedReferencesService.GetPagedRelationsForItem(id, skip, take, filterMustBeIsDependency ?? false);
-
- var pagedViewModel = new PagedViewModel
- {
- Total = relationItems.Total,
- Items = _umbracoMapper.MapEnumerable(relationItems.Items),
- };
-
- return await Task.FromResult(pagedViewModel);
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/TrackedReference/DescendantsTrackedReferenceController.cs b/src/Umbraco.Cms.Api.Management/Controllers/TrackedReference/DescendantsTrackedReferenceController.cs
deleted file mode 100644
index 752b6d8846..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/TrackedReference/DescendantsTrackedReferenceController.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Mapping;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-using Umbraco.Cms.Api.Management.ViewModels.TrackedReferences;
-using Umbraco.New.Cms.Core.Models;
-
-namespace Umbraco.Cms.Api.Management.Controllers.TrackedReference;
-
-public class DescendantsTrackedReferenceController : TrackedReferenceControllerBase
-{
- private readonly ITrackedReferencesService _trackedReferencesSkipTakeService;
- private readonly IUmbracoMapper _umbracoMapper;
-
- public DescendantsTrackedReferenceController(ITrackedReferencesService trackedReferencesSkipTakeService, IUmbracoMapper umbracoMapper)
- {
- _trackedReferencesSkipTakeService = trackedReferencesSkipTakeService;
- _umbracoMapper = umbracoMapper;
- }
-
- ///
- /// Gets a page list of the child nodes of the current item used in any kind of relation.
- ///
- ///
- /// Used when deleting and unpublishing a single item to check if this item has any descending items that are in any
- /// kind of relation.
- /// This is basically finding the descending items which are children in relations.
- ///
- [HttpGet("descendants/{parentId:int}")]
- [MapToApiVersion("1.0")]
- [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)]
- public async Task>> Descendants(int parentId, long skip, long take, bool? filterMustBeIsDependency)
- {
- PagedModel relationItems = _trackedReferencesSkipTakeService.GetPagedDescendantsInReferences(parentId, skip, take, filterMustBeIsDependency ?? true);
- var pagedViewModel = new PagedViewModel
- {
- Total = relationItems.Total,
- Items = _umbracoMapper.MapEnumerable(relationItems.Items),
- };
-
- return await Task.FromResult(pagedViewModel);
- }
-}
diff --git a/src/Umbraco.Cms.Api.Management/Controllers/TrackedReference/ItemsTrackedReferenceController.cs b/src/Umbraco.Cms.Api.Management/Controllers/TrackedReference/ItemsTrackedReferenceController.cs
deleted file mode 100644
index ecc0e3434d..0000000000
--- a/src/Umbraco.Cms.Api.Management/Controllers/TrackedReference/ItemsTrackedReferenceController.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Umbraco.Cms.Core.Mapping;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Api.Common.ViewModels.Pagination;
-using Umbraco.Cms.Api.Management.ViewModels.TrackedReferences;
-using Umbraco.New.Cms.Core.Models;
-
-namespace Umbraco.Cms.Api.Management.Controllers.TrackedReference;
-
-public class ItemsTrackedReferenceController : TrackedReferenceControllerBase
-{
- private readonly ITrackedReferencesService _trackedReferencesSkipTakeService;
- private readonly IUmbracoMapper _umbracoMapper;
-
- public ItemsTrackedReferenceController(ITrackedReferencesService trackedReferencesSkipTakeService, IUmbracoMapper umbracoMapper)
- {
- _trackedReferencesSkipTakeService = trackedReferencesSkipTakeService;
- _umbracoMapper = umbracoMapper;
- }
-
- ///