U4-4847 Refactor ContentService (#1266)

* U4-4748 - refactor Content-, Media- and MemberTypeRepository

* Cleanup Attempt

* Cleanup OperationStatus

* U4-4748 - refactor Content-, Media- and MemberTypeService

* U4-4748 - cleanup locking

* U4-4748 - refactor Content-, Media- and MemberRepository

* U4-4748 - refactor ContentService (in progress)

* U4-4748 - all unit of work must be completed

* U4-4748 - refactor locks, fix tests

* U4-4748 - deal with fixmes

* U4-4748 - lock table migration

* Update UmbracoVersion

* Fix AuthorizeUpgrade

* U4-4748 - cleanup+bugfix lock objects

* U4-4748 - bugfix

* updates a string interpolation
This commit is contained in:
Stephan
2016-05-18 10:55:19 +02:00
committed by Shannon Deminick
parent 12f4873c90
commit ddf38407d8
139 changed files with 7539 additions and 6981 deletions

View File

@@ -240,7 +240,9 @@ namespace Umbraco.Core.Services
using (var uow = UowProvider.CreateUnitOfWork())
{
var repository = uow.CreateRepository<IMediaRepository>();
return repository.Get(id);
var media = repository.Get(id);
uow.Complete();
return media;
}
}
@@ -249,7 +251,9 @@ namespace Umbraco.Core.Services
using (var uow = UowProvider.CreateUnitOfWork())
{
var repository = uow.CreateRepository<IMediaRepository>();
return repository.Count(contentTypeAlias);
var count = repository.Count(contentTypeAlias);
uow.Complete();
return count;
}
}
@@ -258,7 +262,9 @@ namespace Umbraco.Core.Services
using (var uow = UowProvider.CreateUnitOfWork())
{
var repository = uow.CreateRepository<IMediaRepository>();
return repository.CountChildren(parentId, contentTypeAlias);
var count = repository.CountChildren(parentId, contentTypeAlias);
uow.Complete();
return count;
}
}
@@ -267,7 +273,9 @@ namespace Umbraco.Core.Services
using (var uow = UowProvider.CreateUnitOfWork())
{
var repository = uow.CreateRepository<IMediaRepository>();
return repository.CountDescendants(parentId, contentTypeAlias);
var count = repository.CountDescendants(parentId, contentTypeAlias);
uow.Complete();
return count;
}
}
@@ -283,7 +291,9 @@ namespace Umbraco.Core.Services
using (var uow = UowProvider.CreateUnitOfWork())
{
var repository = uow.CreateRepository<IMediaRepository>();
return repository.GetAll(ids.ToArray());
var items = repository.GetAll(ids.ToArray());
uow.Complete();
return items;
}
}
@@ -298,8 +308,9 @@ namespace Umbraco.Core.Services
{
var repository = uow.CreateRepository<IMediaRepository>();
var query = repository.Query.Where(x => x.Key == key);
var contents = repository.GetByQuery(query);
return contents.SingleOrDefault();
var item = repository.GetByQuery(query).SingleOrDefault();
uow.Complete();
return item;
}
}
@@ -313,9 +324,9 @@ namespace Umbraco.Core.Services
using (var uow = UowProvider.CreateUnitOfWork())
{
var repository = uow.CreateRepository<IMediaRepository>();
var query = repository.Query.Where(x => x.Level == level && !x.Path.StartsWith("-21"));
var query = repository.Query.Where(x => x.Level == level && x.Path.StartsWith("-21") == false);
var contents = repository.GetByQuery(query);
uow.Complete();
return contents;
}
}
@@ -330,7 +341,9 @@ namespace Umbraco.Core.Services
using (var uow = UowProvider.CreateUnitOfWork())
{
var repository = uow.CreateRepository<IMediaRepository>();
return repository.GetByVersion(versionId);
var item = repository.GetByVersion(versionId);
uow.Complete();
return item;
}
}
@@ -345,6 +358,7 @@ namespace Umbraco.Core.Services
{
var repository = uow.CreateRepository<IMediaRepository>();
var versions = repository.GetAllVersions(id);
uow.Complete();
return versions;
}
}
@@ -374,7 +388,9 @@ namespace Umbraco.Core.Services
using (var uow = UowProvider.CreateUnitOfWork())
{
var repository = uow.CreateRepository<IMediaRepository>();
return repository.GetAll(ids);
var items = repository.GetAll(ids);
uow.Complete();
return items;
}
}
@@ -390,7 +406,7 @@ namespace Umbraco.Core.Services
var repository = uow.CreateRepository<IMediaRepository>();
var query = repository.Query.Where(x => x.ParentId == id);
var medias = repository.GetByQuery(query);
uow.Complete();
return medias;
}
}
@@ -436,7 +452,7 @@ namespace Umbraco.Core.Services
query.Where(x => x.ParentId == id);
var medias = repository.GetPagedResultsByQuery(query, pageIndex, pageSize, out totalChildren, orderBy, orderDirection, orderBySystemField, filter);
uow.Complete();
return medias;
}
}
@@ -484,7 +500,7 @@ namespace Umbraco.Core.Services
query.Where(x => x.Path.SqlContains(string.Format(",{0},", id), TextColumnType.NVarchar));
}
var contents = repository.GetPagedResultsByQuery(query, pageIndex, pageSize, out totalChildren, orderBy, orderDirection, orderBySystemField, filter);
uow.Complete();
return contents;
}
}
@@ -517,7 +533,7 @@ namespace Umbraco.Core.Services
var pathMatch = media.Path + ",";
var query = repository.Query.Where(x => x.Path.StartsWith(pathMatch) && x.Id != media.Id);
var medias = repository.GetByQuery(query);
uow.Complete();
return medias;
}
}
@@ -558,7 +574,7 @@ namespace Umbraco.Core.Services
var repository = uow.CreateRepository<IMediaRepository>();
var query = repository.Query.Where(x => x.ContentTypeId == id);
var medias = repository.GetByQuery(query);
uow.Complete();
return medias;
}
}
@@ -574,7 +590,7 @@ namespace Umbraco.Core.Services
var repository = uow.CreateRepository<IMediaRepository>();
var query = repository.Query.Where(x => x.ParentId == -1);
var medias = repository.GetByQuery(query);
uow.Complete();
return medias;
}
}
@@ -590,7 +606,7 @@ namespace Umbraco.Core.Services
var repository = uow.CreateRepository<IMediaRepository>();
var query = repository.Query.Where(x => x.Path.Contains("-21"));
var medias = repository.GetByQuery(query);
uow.Complete();
return medias;
}
}
@@ -605,7 +621,9 @@ namespace Umbraco.Core.Services
using (var uow = UowProvider.CreateUnitOfWork())
{
var repo = uow.CreateRepository<IMediaRepository>();
return repo.GetMediaByPath(mediaPath);
var item = repo.GetMediaByPath(mediaPath);
uow.Complete();
return item;
}
}
@@ -620,7 +638,8 @@ namespace Umbraco.Core.Services
{
var repository = uow.CreateRepository<IMediaRepository>();
var query = repository.Query.Where(x => x.ParentId == id);
int count = repository.Count(query);
var count = repository.Count(query);
uow.Complete();
return count > 0;
}
}
@@ -658,7 +677,7 @@ namespace Umbraco.Core.Services
media.ParentId = parentId;
if (media.Trashed)
{
media.ChangeTrashedState(false, parentId);
((Models.Media)media).ChangeTrashedState(false, parentId);
}
Save(media, userId,
//no events!
@@ -716,7 +735,7 @@ namespace Umbraco.Core.Services
if (Deleting.IsRaisedEventCancelled(
new DeleteEventArgs<IMedia>(media, evtMsgs), this))
{
return OperationStatus.Cancelled(evtMsgs);
return OperationStatus.Attempt.Cancel(evtMsgs);
}
//Delete children before deleting the 'possible parent'
@@ -741,7 +760,7 @@ namespace Umbraco.Core.Services
Audit(AuditType.Delete, "Delete Media performed by user", userId, media.Id);
return OperationStatus.Success(evtMsgs);
return OperationStatus.Attempt.Succeed(evtMsgs);
}
/// <summary>
@@ -760,7 +779,7 @@ namespace Umbraco.Core.Services
new SaveEventArgs<IMedia>(media, evtMsgs),
this))
{
return OperationStatus.Cancelled(evtMsgs);
return OperationStatus.Attempt.Cancel(evtMsgs);
}
}
@@ -784,7 +803,7 @@ namespace Umbraco.Core.Services
Saved.RaiseEvent(new SaveEventArgs<IMedia>(media, false, evtMsgs), this);
Audit(AuditType.Save, "Save Media performed by user", userId, media.Id);
return OperationStatus.Success(evtMsgs);
return OperationStatus.Attempt.Succeed(evtMsgs);
}
/// <summary>
@@ -804,7 +823,7 @@ namespace Umbraco.Core.Services
new SaveEventArgs<IMedia>(asArray, evtMsgs),
this))
{
return OperationStatus.Cancelled(evtMsgs);
return OperationStatus.Attempt.Cancel(evtMsgs);
}
}
@@ -831,7 +850,7 @@ namespace Umbraco.Core.Services
Saved.RaiseEvent(new SaveEventArgs<IMedia>(asArray, false, evtMsgs), this);
Audit(AuditType.Save, "Save Media items performed by user", userId, -1);
return OperationStatus.Success(evtMsgs);
return OperationStatus.Attempt.Succeed(evtMsgs);
}
/// <summary>
@@ -858,7 +877,7 @@ namespace Umbraco.Core.Services
files = ((MediaRepository)repository).GetFilesInRecycleBinForUploadField();
if (EmptyingRecycleBin.IsRaisedEventCancelled(new RecycleBinEventArgs(nodeObjectType, entities, files), this))
return;
return; // causes rollback
success = repository.EmptyRecycleBin();
@@ -866,6 +885,8 @@ namespace Umbraco.Core.Services
if (success)
repository.DeleteMediaFiles(files);
uow.Complete();
}
}
Audit(AuditType.Delete, "Empty Media Recycle Bin performed by user", 0, -21);
@@ -893,7 +914,7 @@ namespace Umbraco.Core.Services
var contents = repository.GetByQuery(query).ToArray();
if (Deleting.IsRaisedEventCancelled(new DeleteEventArgs<IMedia>(contents), this))
return;
return; // causes rollback
foreach (var content in contents.OrderByDescending(x => x.ParentId))
{
@@ -911,6 +932,8 @@ namespace Umbraco.Core.Services
//Permanently delete the content
Delete(content, userId);
}
uow.Complete();
}
Audit(AuditType.Delete, "Delete Media items by Type performed by user", userId, -1);
@@ -933,7 +956,7 @@ namespace Umbraco.Core.Services
if (Trashing.IsRaisedEventCancelled(
new MoveEventArgs<IMedia>(new MoveEventInfo<IMedia>(media, originalPath, Constants.System.RecycleBinMedia)), this))
{
return OperationStatus.Cancelled(evtMsgs);
return OperationStatus.Attempt.Cancel(evtMsgs);
}
var moveInfo = new List<MoveEventInfo<IMedia>>
@@ -952,7 +975,7 @@ namespace Umbraco.Core.Services
//Remove 'published' xml from the cmsContentXml table for the unpublished media
uow.Database.Delete<ContentXmlDto>("WHERE nodeId = @Id", new { Id = media.Id });
media.ChangeTrashedState(true, Constants.System.RecycleBinMedia);
((Models.Media)media).ChangeTrashedState(true, Constants.System.RecycleBinMedia);
repository.AddOrUpdate(media);
//Loop through descendants to update their trash state, but ensuring structure by keeping the ParentId
@@ -961,7 +984,7 @@ namespace Umbraco.Core.Services
//Remove 'published' xml from the cmsContentXml table for the unpublished media
uow.Database.Delete<ContentXmlDto>("WHERE nodeId = @Id", new { Id = descendant.Id });
descendant.ChangeTrashedState(true, descendant.ParentId);
((Models.Media)descendant).ChangeTrashedState(true, descendant.ParentId);
repository.AddOrUpdate(descendant);
moveInfo.Add(new MoveEventInfo<IMedia>(descendant, descendant.Path, descendant.ParentId));
@@ -974,7 +997,7 @@ namespace Umbraco.Core.Services
new MoveEventArgs<IMedia>(false, evtMsgs, moveInfo.ToArray()), this);
Audit(AuditType.Move, "Move Media to Recycle Bin performed by user", userId, media.Id);
return OperationStatus.Success(evtMsgs);
return OperationStatus.Attempt.Succeed(evtMsgs);
}
/// <summary>
@@ -1138,6 +1161,7 @@ namespace Umbraco.Core.Services
repository.RebuildXmlStructures(
media => _entitySerializer.Serialize(this, _dataTypeService, _userService, _urlSegmentProviders, media),
contentTypeIds: contentTypeIds.Length == 0 ? null : contentTypeIds);
uow.Complete();
}
Audit(AuditType.Publish, "MediaService.RebuildXmlStructures completed, the xml has been regenerated in the database", 0, -1);
@@ -1163,7 +1187,7 @@ namespace Umbraco.Core.Services
child.Level = parentLevel + 1;
if (parentTrashed != child.Trashed)
{
child.ChangeTrashedState(parentTrashed, child.ParentId);
((Models.Media)child).ChangeTrashedState(parentTrashed, child.ParentId);
}
eventInfo.Add(new MoveEventInfo<IMedia>(child, originalPath, child.ParentId));
@@ -1197,14 +1221,15 @@ namespace Umbraco.Core.Services
if (mediaTypes.Any() == false)
throw new Exception(string.Format("No MediaType matching the passed in Alias: '{0}' was found",
mediaTypeAlias));
mediaTypeAlias)); // causes rollback
var mediaType = mediaTypes.First();
if (mediaType == null)
throw new Exception(string.Format("MediaType matching the passed in Alias: '{0}' was null",
mediaTypeAlias));
mediaTypeAlias)); // causes rollback
uow.Complete();
return mediaType;
}
}