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:guid}")] [MapToApiVersion("1.0")] [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)] public async Task>> Descendants(Guid parentId, long skip, long take, bool filterMustBeIsDependency = true) { PagedModel relationItems = await _trackedReferencesSkipTakeService.GetPagedDescendantsInReferencesAsync(parentId, skip, take, filterMustBeIsDependency); var pagedViewModel = new PagedViewModel { Total = relationItems.Total, Items = _umbracoMapper.MapEnumerable(relationItems.Items), }; return await Task.FromResult(pagedViewModel); } }