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:
committed by
Shannon Deminick
parent
12f4873c90
commit
ddf38407d8
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user