using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Persistence.Repositories; using Umbraco.Cms.Core.Scoping; namespace Umbraco.Cms.Core.Services; public class TrackedReferencesService : ITrackedReferencesService { private readonly ICoreScopeProvider _scopeProvider; private readonly IEntityService _entityService; private readonly ITrackedReferencesRepository _trackedReferencesRepository; public TrackedReferencesService( ITrackedReferencesRepository trackedReferencesRepository, ICoreScopeProvider scopeProvider, IEntityService entityService) { _trackedReferencesRepository = trackedReferencesRepository; _scopeProvider = scopeProvider; _entityService = entityService; } public Task> GetPagedRelationsForItemAsync(Guid key, long skip, long take, bool filterMustBeIsDependency) { using ICoreScope scope = _scopeProvider.CreateCoreScope(autoComplete: true); IEnumerable items = _trackedReferencesRepository.GetPagedRelationsForItem(key, skip, take, filterMustBeIsDependency, out var totalItems); var pagedModel = new PagedModel(totalItems, items); return Task.FromResult(pagedModel); } public async Task> GetPagedRelationsForRecycleBinAsync(UmbracoObjectTypes objectType, long skip, long take, bool filterMustBeIsDependency) { Guid objectTypeKey = objectType switch { UmbracoObjectTypes.Document => Constants.ObjectTypes.Document, UmbracoObjectTypes.Media => Constants.ObjectTypes.Media, _ => throw new ArgumentOutOfRangeException(nameof(objectType), "Only documents and media have recycle bin support."), }; using ICoreScope scope = _scopeProvider.CreateCoreScope(autoComplete: true); IEnumerable items = _trackedReferencesRepository.GetPagedRelationsForRecycleBin(objectTypeKey, skip, take, filterMustBeIsDependency, out var totalItems); var pagedModel = new PagedModel(totalItems, items); return await Task.FromResult(pagedModel); } public Task> GetPagedDescendantsInReferencesAsync(Guid parentKey, long skip, long take, bool filterMustBeIsDependency) { using ICoreScope scope = _scopeProvider.CreateCoreScope(autoComplete: true); IEnumerable items = _trackedReferencesRepository.GetPagedDescendantsInReferences( parentKey, skip, take, filterMustBeIsDependency, out var totalItems); var pagedModel = new PagedModel(totalItems, items); return Task.FromResult(pagedModel); } public Task> GetPagedItemsWithRelationsAsync(ISet keys, long skip, long take, bool filterMustBeIsDependency) { using ICoreScope scope = _scopeProvider.CreateCoreScope(autoComplete: true); IEnumerable items = _trackedReferencesRepository.GetPagedItemsWithRelations(keys, skip, take, filterMustBeIsDependency, out var totalItems); var pagedModel = new PagedModel(totalItems, items); return Task.FromResult(pagedModel); } public async Task> GetPagedKeysWithDependentReferencesAsync(ISet keys, Guid objectTypeId, long skip, long take) { using ICoreScope scope = _scopeProvider.CreateCoreScope(autoComplete: true); return await _trackedReferencesRepository.GetPagedNodeKeysWithDependantReferencesAsync(keys, objectTypeId, skip, take); } }