Moves content xml crud logic for member service to member repo

This commit is contained in:
Shannon
2014-04-28 19:04:53 +10:00
parent 2e96de5449
commit e0e12d5773
4 changed files with 44 additions and 21 deletions

View File

@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Xml.Linq;
using Umbraco.Core.Models;
using Umbraco.Core.Models.Rdbms;
using Umbraco.Core.Persistence.Querying;
@@ -54,5 +55,12 @@ namespace Umbraco.Core.Persistence.Repositories
Sql sql, int pageIndex, int pageSize, out int totalRecords,
Func<IEnumerable<TDto>, int[]> resolveIds);
/// <summary>
/// Used to add/update published xml for the media item
/// </summary>
/// <param name="content"></param>
/// <param name="xml"></param>
void AddOrUpdateContentXml(IMember content, Func<IMember, XElement> xml);
}
}

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Linq.Expressions;
using System.Xml.Linq;
using Umbraco.Core.Configuration;
using Umbraco.Core.IO;
using Umbraco.Core.Models.EntityBase;
@@ -24,6 +25,7 @@ namespace Umbraco.Core.Persistence.Repositories
{
private readonly IMemberTypeRepository _memberTypeRepository;
private readonly IMemberGroupRepository _memberGroupRepository;
private readonly ContentXmlRepository<IMember> _contentXmlRepository;
public MemberRepository(IDatabaseUnitOfWork work, IMemberTypeRepository memberTypeRepository, IMemberGroupRepository memberGroupRepository)
: base(work)
@@ -31,6 +33,7 @@ namespace Umbraco.Core.Persistence.Repositories
if (memberTypeRepository == null) throw new ArgumentNullException("memberTypeRepository");
_memberTypeRepository = memberTypeRepository;
_memberGroupRepository = memberGroupRepository;
_contentXmlRepository = new ContentXmlRepository<IMember>(work, NullCacheProvider.Current);
}
public MemberRepository(IDatabaseUnitOfWork work, IRepositoryCacheProvider cache, IMemberTypeRepository memberTypeRepository, IMemberGroupRepository memberGroupRepository)
@@ -39,6 +42,7 @@ namespace Umbraco.Core.Persistence.Repositories
if (memberTypeRepository == null) throw new ArgumentNullException("memberTypeRepository");
_memberTypeRepository = memberTypeRepository;
_memberGroupRepository = memberGroupRepository;
_contentXmlRepository = new ContentXmlRepository<IMember>(work, NullCacheProvider.Current);
}
#region Overrides of RepositoryBase<int, IMembershipUser>
@@ -594,6 +598,13 @@ namespace Umbraco.Core.Persistence.Repositories
return GetAll(resolveIds(pagedResult.Items)).ToArray();
}
public void AddOrUpdateContentXml(IMember content, Func<IMember, XElement> xml)
{
var contentExists = Database.ExecuteScalar<int>("SELECT COUNT(nodeId) FROM cmsContentXml WHERE nodeId = @Id", new { Id = content.Id }) != 0;
_contentXmlRepository.AddOrUpdate(new ContentXmlEntity<IMember>(contentExists, content, xml));
}
private IMember BuildFromDto(List<MemberReadOnlyDto> dtos)
{
if (dtos == null || dtos.Any() == false)

View File

@@ -740,11 +740,9 @@ namespace Umbraco.Core.Services
using (var repository = _repositoryFactory.CreateMemberRepository(uow))
{
repository.AddOrUpdate(member);
uow.Commit();
//insert the xml
var xml = _entitySerializer.Serialize(_dataTypeService, member);
CreateAndSaveMemberXml(xml, member.Id, uow.Database);
repository.AddOrUpdateContentXml(member, m => _entitySerializer.Serialize(_dataTypeService, m));
uow.Commit();
}
Saved.RaiseEvent(new SaveEventArgs<IMember>(member, false), this);
@@ -848,10 +846,8 @@ namespace Umbraco.Core.Services
using (var repository = _repositoryFactory.CreateMemberRepository(uow))
{
repository.AddOrUpdate(entity);
repository.AddOrUpdateContentXml(entity, m => _entitySerializer.Serialize(_dataTypeService, m));
uow.Commit();
var xml = _entitySerializer.Serialize(_dataTypeService, entity);
CreateAndSaveMemberXml(xml, entity.Id, uow.Database);
}
if (raiseEvents)
@@ -875,16 +871,11 @@ namespace Umbraco.Core.Services
foreach (var member in asArray)
{
repository.AddOrUpdate(member);
repository.AddOrUpdateContentXml(member, m => _entitySerializer.Serialize(_dataTypeService, m));
}
//commit the whole lot in one go
uow.Commit();
foreach (var member in asArray)
{
var xml = _entitySerializer.Serialize(_dataTypeService, member);
CreateAndSaveMemberXml(xml, member.Id, uow.Database);
}
}
if (raiseEvents)
@@ -1143,14 +1134,7 @@ namespace Umbraco.Core.Services
}
}
}
private void CreateAndSaveMemberXml(XElement xml, int id, UmbracoDatabase db)
{
var poco = new ContentXmlDto { NodeId = id, Xml = xml.ToString(SaveOptions.None) };
var exists = db.FirstOrDefault<ContentXmlDto>("WHERE nodeId = @Id", new { Id = id }) != null;
int result = exists ? db.Update(poco) : Convert.ToInt32(db.Insert(poco));
}
#region Event Handlers
/// <summary>

View File

@@ -7,6 +7,8 @@ using Umbraco.Core.Models.Membership;
using Umbraco.Core.Models.Rdbms;
using Umbraco.Core.Persistence;
using Umbraco.Core.Persistence.Querying;
using Umbraco.Core.Persistence.Repositories;
using Umbraco.Core.Persistence.UnitOfWork;
using Umbraco.Core.Services;
using Umbraco.Tests.TestHelpers;
using Umbraco.Tests.TestHelpers.Entities;
@@ -977,5 +979,23 @@ namespace Umbraco.Tests.Services
Assert.IsTrue(found.IsApproved);
}
[Test]
public void Ensure_Content_Xml_Created()
{
IMemberType memberType = MockedContentTypes.CreateSimpleMemberType();
ServiceContext.MemberTypeService.Save(memberType);
var customMember = MockedMember.CreateSimpleMember(memberType, "hello", "hello@test.com", "hello", "hello");
ServiceContext.MemberService.Save(customMember);
var provider = new PetaPocoUnitOfWorkProvider();
var uow = provider.GetUnitOfWork();
using (RepositoryResolver.Current.ResolveByType<IMemberRepository>(uow))
{
Assert.IsTrue(uow.Database.Exists<ContentXmlDto>(customMember.Id));
}
}
}
}