init commit of removing code for entity service that loads in any property data

This commit is contained in:
Shannon
2019-06-13 18:45:33 +10:00
parent 7f5f304d2d
commit 16f6bbcbd4
9 changed files with 171 additions and 344 deletions

View File

@@ -19,30 +19,25 @@ namespace Umbraco.Core.Services.Implement
public class EntityService : ScopeRepositoryService, IEntityService
{
private readonly IEntityRepository _entityRepository;
private readonly Dictionary<string, (UmbracoObjectTypes ObjectType, Func<int, IUmbracoEntity> GetById, Func<Guid, IUmbracoEntity> GetByKey)> _objectTypes;
private readonly Dictionary<string, UmbracoObjectTypes> _objectTypes;
private IQuery<IUmbracoEntity> _queryRootEntity;
private readonly IdkMap _idkMap;
public EntityService(IScopeProvider provider, ILogger logger, IEventMessagesFactory eventMessagesFactory,
IContentService contentService, IContentTypeService contentTypeService,
IMediaService mediaService, IMediaTypeService mediaTypeService,
IDataTypeService dataTypeService,
IMemberService memberService, IMemberTypeService memberTypeService, IdkMap idkMap,
IEntityRepository entityRepository)
public EntityService(IScopeProvider provider, ILogger logger, IEventMessagesFactory eventMessagesFactory, IdkMap idkMap, IEntityRepository entityRepository)
: base(provider, logger, eventMessagesFactory)
{
_idkMap = idkMap;
_entityRepository = entityRepository;
_objectTypes = new Dictionary<string, (UmbracoObjectTypes, Func<int, IUmbracoEntity>, Func<Guid, IUmbracoEntity>)>
_objectTypes = new Dictionary<string, UmbracoObjectTypes>
{
{ typeof (IDataType).FullName, (UmbracoObjectTypes.DataType, dataTypeService.GetDataType, dataTypeService.GetDataType) },
{ typeof (IContent).FullName, (UmbracoObjectTypes.Document, contentService.GetById, contentService.GetById) },
{ typeof (IContentType).FullName, (UmbracoObjectTypes.DocumentType, contentTypeService.Get, contentTypeService.Get) },
{ typeof (IMedia).FullName, (UmbracoObjectTypes.Media, mediaService.GetById, mediaService.GetById) },
{ typeof (IMediaType).FullName, (UmbracoObjectTypes.MediaType, mediaTypeService.Get, mediaTypeService.Get) },
{ typeof (IMember).FullName, (UmbracoObjectTypes.Member, memberService.GetById, memberService.GetByKey) },
{ typeof (IMemberType).FullName, (UmbracoObjectTypes.MemberType, memberTypeService.Get, memberTypeService.Get) },
{ typeof (IDataType).FullName, UmbracoObjectTypes.DataType },
{ typeof (IContent).FullName, UmbracoObjectTypes.Document },
{ typeof (IContentType).FullName, UmbracoObjectTypes.DocumentType },
{ typeof (IMedia).FullName, UmbracoObjectTypes.Media },
{ typeof (IMediaType).FullName, UmbracoObjectTypes.MediaType },
{ typeof (IMember).FullName, UmbracoObjectTypes.Member },
{ typeof (IMemberType).FullName, UmbracoObjectTypes.MemberType },
};
}
@@ -54,162 +49,68 @@ namespace Umbraco.Core.Services.Implement
#endregion
// gets the getters, throws if not supported
private (UmbracoObjectTypes ObjectType, Func<int, IUmbracoEntity> GetById, Func<Guid, IUmbracoEntity> GetByKey) GetGetters(Type type)
// gets the object type, throws if not supported
private UmbracoObjectTypes GetObjectType(Type type)
{
if (type?.FullName == null || !_objectTypes.TryGetValue(type.FullName, out var getters))
if (type?.FullName == null || !_objectTypes.TryGetValue(type.FullName, out var objType))
throw new NotSupportedException($"Type \"{type?.FullName ?? "<null>"}\" is not supported here.");
return getters;
return objType;
}
/// <inheritdoc />
public IEntitySlim Get(int id)
{
return (IEntitySlim) Get(id, false);
}
/// <inheritdoc />
public IUmbracoEntity Get(int id, bool full)
{
if (!full)
using (ScopeProvider.CreateScope(autoComplete: true))
{
// get the light entity
using (ScopeProvider.CreateScope(autoComplete: true))
{
return _entityRepository.Get(id);
}
return _entityRepository.Get(id);
}
// get the full entity
var objectType = GetObjectType(id);
var entityType = objectType.GetClrType();
var getters = GetGetters(entityType);
return getters.GetById(id);
}
/// <inheritdoc />
public IEntitySlim Get(Guid key)
{
return (IEntitySlim) Get(key, false);
}
/// <inheritdoc />
public IUmbracoEntity Get(Guid key, bool full)
{
if (!full)
using (ScopeProvider.CreateScope(autoComplete: true))
{
// get the light entity
using (ScopeProvider.CreateScope(autoComplete: true))
{
return _entityRepository.Get(key);
}
return _entityRepository.Get(key);
}
// get the full entity
var objectType = GetObjectType(key);
var entityType = objectType.GetClrType();
var getters = GetGetters(entityType);
return getters.GetByKey(key);
}
/// <inheritdoc />
public virtual IEntitySlim Get(int id, UmbracoObjectTypes objectType)
{
return (IEntitySlim) Get(id, objectType, false);
}
/// <inheritdoc />
public virtual IUmbracoEntity Get(int id, UmbracoObjectTypes objectType, bool full)
{
if (!full)
using (ScopeProvider.CreateScope(autoComplete: true))
{
// get the light entity
using (ScopeProvider.CreateScope(autoComplete: true))
{
return _entityRepository.Get(id, objectType.GetGuid());
}
return _entityRepository.Get(id, objectType.GetGuid());
}
// get the full entity
var entityType = objectType.GetClrType();
var getters = GetGetters(entityType);
return getters.GetById(id);
}
/// <inheritdoc />
public IEntitySlim Get(Guid key, UmbracoObjectTypes objectType)
{
return (IEntitySlim) Get(key, objectType, false);
}
/// <inheritdoc />
public IUmbracoEntity Get(Guid key, UmbracoObjectTypes objectType, bool full)
{
if (!full)
using (ScopeProvider.CreateScope(autoComplete: true))
{
// get the light entity
using (ScopeProvider.CreateScope(autoComplete: true))
{
return _entityRepository.Get(key, objectType.GetGuid());
}
return _entityRepository.Get(key, objectType.GetGuid());
}
// get the full entity
var entityType = objectType.GetClrType();
var getters = GetGetters(entityType);
return getters.GetByKey(key);
}
/// <inheritdoc />
public virtual IEntitySlim Get<T>(int id)
where T : IUmbracoEntity
{
return (IEntitySlim) Get<T>(id, false);
}
/// <inheritdoc />
public virtual IUmbracoEntity Get<T>(int id, bool full)
where T : IUmbracoEntity
{
if (!full)
using (ScopeProvider.CreateScope(autoComplete: true))
{
// get the light entity
using (ScopeProvider.CreateScope(autoComplete: true))
{
return _entityRepository.Get(id);
}
return _entityRepository.Get(id);
}
// get the full entity
var entityType = typeof (T);
var getters = GetGetters(entityType);
return getters.GetById(id);
}
/// <inheritdoc />
public virtual IEntitySlim Get<T>(Guid key)
where T : IUmbracoEntity
{
return (IEntitySlim) Get<T>(key, false);
}
/// <inheritdoc />
public IUmbracoEntity Get<T>(Guid key, bool full)
where T : IUmbracoEntity
{
if (!full)
using (ScopeProvider.CreateScope(autoComplete: true))
{
// get the light entity
using (ScopeProvider.CreateScope(autoComplete: true))
{
return _entityRepository.Get(key);
}
return _entityRepository.Get(key);
}
// get the full entity
var entityType = typeof (T);
var getters = GetGetters(entityType);
return getters.GetByKey(key);
}
/// <inheritdoc />
@@ -240,8 +141,7 @@ namespace Umbraco.Core.Services.Implement
where T : IUmbracoEntity
{
var entityType = typeof (T);
var getters = GetGetters(entityType);
var objectType = getters.ObjectType;
var objectType = GetObjectType(entityType);
var objectTypeId = objectType.GetGuid();
using (ScopeProvider.CreateScope(autoComplete: true))
@@ -261,7 +161,7 @@ namespace Umbraco.Core.Services.Implement
if (entityType == null)
throw new NotSupportedException($"Type \"{objectType}\" is not supported here.");
GetGetters(entityType);
GetObjectType(entityType);
using (ScopeProvider.CreateScope(autoComplete: true))
{
@@ -277,7 +177,7 @@ namespace Umbraco.Core.Services.Implement
public virtual IEnumerable<IEntitySlim> GetAll(Guid objectType, params int[] ids)
{
var entityType = ObjectTypes.GetClrType(objectType);
GetGetters(entityType);
GetObjectType(entityType);
using (ScopeProvider.CreateScope(autoComplete: true))
{
@@ -290,8 +190,7 @@ namespace Umbraco.Core.Services.Implement
where T : IUmbracoEntity
{
var entityType = typeof (T);
var getters = GetGetters(entityType);
var objectType = getters.ObjectType;
var objectType = GetObjectType(entityType);
var objectTypeId = objectType.GetGuid();
using (ScopeProvider.CreateScope(autoComplete: true))
@@ -304,7 +203,7 @@ namespace Umbraco.Core.Services.Implement
public IEnumerable<IEntitySlim> GetAll(UmbracoObjectTypes objectType, Guid[] keys)
{
var entityType = objectType.GetClrType();
GetGetters(entityType);
GetObjectType(entityType);
using (ScopeProvider.CreateScope(autoComplete: true))
{
@@ -316,7 +215,7 @@ namespace Umbraco.Core.Services.Implement
public virtual IEnumerable<IEntitySlim> GetAll(Guid objectType, params Guid[] keys)
{
var entityType = ObjectTypes.GetClrType(objectType);
GetGetters(entityType);
GetObjectType(entityType);
using (ScopeProvider.CreateScope(autoComplete: true))
{
@@ -377,21 +276,21 @@ namespace Umbraco.Core.Services.Implement
}
}
/// <summary>
/// Gets a collection of children by the parent's Id and UmbracoObjectType without adding property data
/// </summary>
/// <param name="parentId">Id of the parent to retrieve children for</param>
/// <returns>An enumerable list of <see cref="IUmbracoEntity"/> objects</returns>
internal IEnumerable<IEntitySlim> GetMediaChildrenWithoutPropertyData(int parentId)
{
using (ScopeProvider.CreateScope(autoComplete: true))
{
var query = Query<IUmbracoEntity>().Where(x => x.ParentId == parentId);
///// <summary>
///// Gets a collection of children by the parent's Id and UmbracoObjectType without adding property data
///// </summary>
///// <param name="parentId">Id of the parent to retrieve children for</param>
///// <returns>An enumerable list of <see cref="IUmbracoEntity"/> objects</returns>
//internal IEnumerable<IEntitySlim> GetMediaChildrenWithoutPropertyData(int parentId)
//{
// using (ScopeProvider.CreateScope(autoComplete: true))
// {
// var query = Query<IUmbracoEntity>().Where(x => x.ParentId == parentId);
// TODO: see https://github.com/umbraco/Umbraco-CMS/pull/3460#issuecomment-434903930 we need to not load any property data at all for media
return ((EntityRepository)_entityRepository).GetMediaByQueryWithoutPropertyData(query);
}
}
// // TODO: see https://github.com/umbraco/Umbraco-CMS/pull/3460#issuecomment-434903930 we need to not load any property data at all for media
// return ((EntityRepository)_entityRepository).GetMediaByQueryWithoutPropertyData(query);
// }
//}
/// <inheritdoc />
public virtual IEnumerable<IEntitySlim> GetDescendants(int id)
@@ -578,7 +477,7 @@ namespace Umbraco.Core.Services.Implement
public virtual IEnumerable<TreeEntityPath> GetAllPaths(UmbracoObjectTypes objectType, params int[] ids)
{
var entityType = objectType.GetClrType();
GetGetters(entityType);
GetObjectType(entityType);
using (ScopeProvider.CreateScope(autoComplete: true))
{
@@ -590,7 +489,7 @@ namespace Umbraco.Core.Services.Implement
public virtual IEnumerable<TreeEntityPath> GetAllPaths(UmbracoObjectTypes objectType, params Guid[] keys)
{
var entityType = objectType.GetClrType();
GetGetters(entityType);
GetObjectType(entityType);
using (ScopeProvider.CreateScope(autoComplete: true))
{