Fixes up memberservice service with correct even emitting and no nested uow and removes inner transactions in MemberGroupRepository

This commit is contained in:
Shannon
2017-01-25 14:40:24 +11:00
parent 096c3aeec6
commit e14ca4f3d0
2 changed files with 61 additions and 74 deletions

View File

@@ -147,30 +147,26 @@ namespace Umbraco.Core.Persistence.Repositories
public IMemberGroup CreateIfNotExists(string roleName)
{
using (var transaction = Database.GetTransaction())
var qry = new Query<IMemberGroup>().Where(group => group.Name.Equals(roleName));
var result = GetByQuery(qry);
if (result.Any()) return null;
var grp = new MemberGroup
{
var qry = new Query<IMemberGroup>().Where(group => group.Name.Equals(roleName));
var result = GetByQuery(qry);
Name = roleName
};
if (result.Any()) return null;
PersistNewItem(grp);
var grp = new MemberGroup
{
Name = roleName
};
PersistNewItem(grp);
if (SavingMemberGroup.IsRaisedEventCancelled(new SaveEventArgs<IMemberGroup>(grp), this, UnitOfWork.EventManager))
{
return null;
}
transaction.Complete();
SavedMemberGroup.RaiseEvent(new SaveEventArgs<IMemberGroup>(grp), this, UnitOfWork.EventManager);
return grp;
if (SavingMemberGroup.IsRaisedEventCancelled(new SaveEventArgs<IMemberGroup>(grp), this, UnitOfWork.EventManager))
{
return null;
}
SavedMemberGroup.RaiseEvent(new SaveEventArgs<IMemberGroup>(grp), this, UnitOfWork.EventManager);
return grp;
}
public IEnumerable<IMemberGroup> GetMemberGroupsForMember(int memberId)
@@ -221,51 +217,39 @@ namespace Umbraco.Core.Persistence.Repositories
public void AssignRoles(string[] usernames, string[] roleNames)
{
using (var transaction = Database.GetTransaction())
{
//first get the member ids based on the usernames
var memberSql = new Sql();
var memberObjectType = new Guid(Constants.ObjectTypes.Member);
memberSql.Select("umbracoNode.id")
.From<NodeDto>()
.InnerJoin<MemberDto>()
.On<NodeDto, MemberDto>(dto => dto.NodeId, dto => dto.NodeId)
.Where<NodeDto>(x => x.NodeObjectType == memberObjectType)
.Where("cmsMember.LoginName in (@usernames)", new { usernames = usernames });
var memberIds = Database.Fetch<int>(memberSql).ToArray();
//first get the member ids based on the usernames
var memberSql = new Sql();
var memberObjectType = new Guid(Constants.ObjectTypes.Member);
memberSql.Select("umbracoNode.id")
.From<NodeDto>()
.InnerJoin<MemberDto>()
.On<NodeDto, MemberDto>(dto => dto.NodeId, dto => dto.NodeId)
.Where<NodeDto>(x => x.NodeObjectType == memberObjectType)
.Where("cmsMember.LoginName in (@usernames)", new { usernames = usernames });
var memberIds = Database.Fetch<int>(memberSql).ToArray();
AssignRolesInternal(memberIds, roleNames);
transaction.Complete();
}
AssignRolesInternal(memberIds, roleNames);
}
public void DissociateRoles(string[] usernames, string[] roleNames)
{
using (var transaction = Database.GetTransaction())
{
//first get the member ids based on the usernames
var memberSql = new Sql();
var memberObjectType = new Guid(Constants.ObjectTypes.Member);
memberSql.Select("umbracoNode.id")
.From<NodeDto>()
.InnerJoin<MemberDto>()
.On<NodeDto, MemberDto>(dto => dto.NodeId, dto => dto.NodeId)
.Where<NodeDto>(x => x.NodeObjectType == memberObjectType)
.Where("cmsMember.LoginName in (@usernames)", new { usernames = usernames });
var memberIds = Database.Fetch<int>(memberSql).ToArray();
//first get the member ids based on the usernames
var memberSql = new Sql();
var memberObjectType = new Guid(Constants.ObjectTypes.Member);
memberSql.Select("umbracoNode.id")
.From<NodeDto>()
.InnerJoin<MemberDto>()
.On<NodeDto, MemberDto>(dto => dto.NodeId, dto => dto.NodeId)
.Where<NodeDto>(x => x.NodeObjectType == memberObjectType)
.Where("cmsMember.LoginName in (@usernames)", new { usernames = usernames });
var memberIds = Database.Fetch<int>(memberSql).ToArray();
DissociateRolesInternal(memberIds, roleNames);
transaction.Complete();
}
DissociateRolesInternal(memberIds, roleNames);
}
public void AssignRoles(int[] memberIds, string[] roleNames)
{
using (var transaction = Database.GetTransaction())
{
AssignRolesInternal(memberIds, roleNames);
transaction.Complete();
}
AssignRolesInternal(memberIds, roleNames);
}
public void AssignRolesInternal(int[] memberIds, string[] roleNames)
@@ -333,11 +317,7 @@ namespace Umbraco.Core.Persistence.Repositories
public void DissociateRoles(int[] memberIds, string[] roleNames)
{
using (var transaction = Database.GetTransaction())
{
DissociateRolesInternal(memberIds, roleNames);
transaction.Complete();
}
DissociateRolesInternal(memberIds, roleNames);
}
private void DissociateRolesInternal(int[] memberIds, string[] roleNames)

View File

@@ -1067,12 +1067,13 @@ namespace Umbraco.Core.Services
using (var repository = RepositoryFactory.CreateMemberGroupRepository(uow))
{
repository.CreateIfNotExists(roleName);
uow.Commit();
}
}
public IEnumerable<string> GetAllRoles()
{
var uow = UowProvider.GetUnitOfWork();
var uow = UowProvider.GetReadOnlyUnitOfWork();
using (var repository = RepositoryFactory.CreateMemberGroupRepository(uow))
{
var result = repository.GetAll();
@@ -1082,7 +1083,7 @@ namespace Umbraco.Core.Services
public IEnumerable<string> GetAllRoles(int memberId)
{
var uow = UowProvider.GetUnitOfWork();
var uow = UowProvider.GetReadOnlyUnitOfWork();
using (var repository = RepositoryFactory.CreateMemberGroupRepository(uow))
{
var result = repository.GetMemberGroupsForMember(memberId);
@@ -1092,7 +1093,7 @@ namespace Umbraco.Core.Services
public IEnumerable<string> GetAllRoles(string username)
{
var uow = UowProvider.GetUnitOfWork();
var uow = UowProvider.GetReadOnlyUnitOfWork();
using (var repository = RepositoryFactory.CreateMemberGroupRepository(uow))
{
var result = repository.GetMemberGroupsForMember(username);
@@ -1102,7 +1103,7 @@ namespace Umbraco.Core.Services
public IEnumerable<IMember> GetMembersInRole(string roleName)
{
var uow = UowProvider.GetUnitOfWork();
var uow = UowProvider.GetReadOnlyUnitOfWork();
using (var repository = RepositoryFactory.CreateMemberRepository(uow))
{
return repository.GetByMemberGroup(roleName);
@@ -1111,7 +1112,7 @@ namespace Umbraco.Core.Services
public IEnumerable<IMember> FindMembersInRole(string roleName, string usernameToMatch, StringPropertyMatchType matchType = StringPropertyMatchType.StartsWith)
{
var uow = UowProvider.GetUnitOfWork();
var uow = UowProvider.GetReadOnlyUnitOfWork();
using (var repository = RepositoryFactory.CreateMemberRepository(uow))
{
return repository.FindMembersInRole(roleName, usernameToMatch, matchType);
@@ -1131,18 +1132,20 @@ namespace Umbraco.Core.Services
}
}
var uow = UowProvider.GetUnitOfWork();
List<IMemberGroup> found;
var uow = UowProvider.GetReadOnlyUnitOfWork();
using (var repository = RepositoryFactory.CreateMemberGroupRepository(uow))
{
var qry = new Query<IMemberGroup>().Where(g => g.Name == roleName);
var found = repository.GetByQuery(qry).ToArray();
foreach (var memberGroup in found)
{
_memberGroupService.Delete(memberGroup);
}
return found.Any();
found = repository.GetByQuery(qry).ToList();
}
foreach (var memberGroup in found)
{
_memberGroupService.Delete(memberGroup);
}
return found.Any();
}
}
public void AssignRole(string username, string roleName)
@@ -1156,6 +1159,7 @@ namespace Umbraco.Core.Services
using (var repository = RepositoryFactory.CreateMemberGroupRepository(uow))
{
repository.AssignRoles(usernames, roleNames);
uow.Commit();
}
}
@@ -1170,6 +1174,7 @@ namespace Umbraco.Core.Services
using (var repository = RepositoryFactory.CreateMemberGroupRepository(uow))
{
repository.DissociateRoles(usernames, roleNames);
uow.Commit();
}
}
@@ -1184,6 +1189,7 @@ namespace Umbraco.Core.Services
using (var repository = RepositoryFactory.CreateMemberGroupRepository(uow))
{
repository.AssignRoles(memberIds, roleNames);
uow.Commit();
}
}
@@ -1198,6 +1204,7 @@ namespace Umbraco.Core.Services
using (var repository = RepositoryFactory.CreateMemberGroupRepository(uow))
{
repository.DissociateRoles(memberIds, roleNames);
uow.Commit();
}
}
@@ -1207,7 +1214,7 @@ namespace Umbraco.Core.Services
private IMemberType FindMemberTypeByAlias(string memberTypeAlias)
{
using (var repository = RepositoryFactory.CreateMemberTypeRepository(UowProvider.GetUnitOfWork()))
using (var repository = RepositoryFactory.CreateMemberTypeRepository(UowProvider.GetReadOnlyUnitOfWork()))
{
var query = Query<IMemberType>.Builder.Where(x => x.Alias == memberTypeAlias);
var types = repository.GetByQuery(query);