From 33bba5704749a3b177f779cff6cd33a9d0287cfe Mon Sep 17 00:00:00 2001 From: Morten Christensen Date: Wed, 4 Sep 2013 16:30:51 +0200 Subject: [PATCH] Implementing addtional methods in the MemberService --- .../Repositories/MemberRepository.cs | 3 + src/Umbraco.Core/Services/IMemberService.cs | 8 +- src/Umbraco.Core/Services/MemberService.cs | 190 ++++++++++++++++-- 3 files changed, 177 insertions(+), 24 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs index fca06ad58a..856ede87d1 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs @@ -15,6 +15,9 @@ using Umbraco.Core.Persistence.UnitOfWork; namespace Umbraco.Core.Persistence.Repositories { + /// + /// Represents a repository for doing CRUD operations for + /// internal class MemberRepository : VersionableRepositoryBase, IMemberRepository { private readonly IMemberTypeRepository _memberTypeRepository; diff --git a/src/Umbraco.Core/Services/IMemberService.cs b/src/Umbraco.Core/Services/IMemberService.cs index 525dec86dc..a6a2a14424 100644 --- a/src/Umbraco.Core/Services/IMemberService.cs +++ b/src/Umbraco.Core/Services/IMemberService.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using Umbraco.Core.Models; namespace Umbraco.Core.Services @@ -10,6 +11,9 @@ namespace Umbraco.Core.Services { IMember GetById(int id); IMember GetByKey(Guid id); + IEnumerable GetMembersByMemberType(string memberTypeAlias); + IEnumerable GetMembersByGroup(string memberGroupName); + IEnumerable GetAllMembers(params int[] ids); } /// @@ -22,11 +26,11 @@ namespace Umbraco.Core.Services { IMember CreateMember(string username, string email, string password, string memberTypeAlias, int userId = 0); - IMember GetByUsername(string login); + IMember GetById(object id); IMember GetByEmail(string email); - IMember GetById(object id); + IMember GetByUsername(string login); void Delete(IMember membershipUser); diff --git a/src/Umbraco.Core/Services/MemberService.cs b/src/Umbraco.Core/Services/MemberService.cs index d942a51944..a24a7d8d49 100644 --- a/src/Umbraco.Core/Services/MemberService.cs +++ b/src/Umbraco.Core/Services/MemberService.cs @@ -1,4 +1,6 @@ using System; +using System.Collections.Generic; +using System.Runtime.CompilerServices; using Umbraco.Core.Models; using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.Querying; @@ -31,6 +33,13 @@ namespace Umbraco.Core.Services _uowProvider = provider; } + #region IMemberService Implementation + + /// + /// Gets a Member by its integer Id + /// + /// + /// public IMember GetById(int id) { using (var repository = _repositoryFactory.CreateMemberRepository(_uowProvider.GetUnitOfWork())) @@ -39,6 +48,15 @@ namespace Umbraco.Core.Services } } + /// + /// Gets a Member by its Guid key + /// + /// + /// The guid key corresponds to the unique id in the database + /// and the user id in the membership provider. + /// + /// + /// public IMember GetByKey(Guid id) { using (var repository = _repositoryFactory.CreateMemberRepository(_uowProvider.GetUnitOfWork())) @@ -49,6 +67,134 @@ namespace Umbraco.Core.Services } } + /// + /// Gets a list of Members by their MemberType + /// + /// + /// + public IEnumerable GetMembersByMemberType(string memberTypeAlias) + { + using (var repository = _repositoryFactory.CreateMemberRepository(_uowProvider.GetUnitOfWork())) + { + var query = Query.Builder.Where(x => x.ContentTypeAlias == memberTypeAlias); + var members = repository.GetByQuery(query); + return members; + } + } + + /// + /// Gets a list of Members by the MemberGroup they are part of + /// + /// + /// + public IEnumerable GetMembersByGroup(string memberGroupName) + { + using (var repository = _repositoryFactory.CreateMemberRepository(_uowProvider.GetUnitOfWork())) + { + return repository.GetByMemberGroup(memberGroupName); + } + } + + /// + /// Gets a list of all Members + /// + /// + /// + public IEnumerable GetAllMembers(params int[] ids) + { + using (var repository = _repositoryFactory.CreateMemberRepository(_uowProvider.GetUnitOfWork())) + { + return repository.GetAll(ids); + } + } + + /// + /// Gets a list of Members with a certain string property value + /// + /// + /// + /// + public IEnumerable GetMembersByPropertyValue(string propertyTypeAlias, string value) + { + using (var repository = _repositoryFactory.CreateMemberRepository(_uowProvider.GetUnitOfWork())) + { + var query = + Query.Builder.Where( + x => + ((Member)x).PropertyTypeAlias == propertyTypeAlias && + (((Member)x).LongStringPropertyValue.Contains(value) || + ((Member)x).ShortStringPropertyValue.Contains(value))); + + var members = repository.GetByQuery(query); + return members; + } + } + + /// + /// Gets a list of Members with a certain integer property value + /// + /// + /// + /// + public IEnumerable GetMembersByPropertyValue(string propertyTypeAlias, int value) + { + using (var repository = _repositoryFactory.CreateMemberRepository(_uowProvider.GetUnitOfWork())) + { + var query = + Query.Builder.Where( + x => + ((Member)x).PropertyTypeAlias == propertyTypeAlias && + ((Member)x).IntegerropertyValue == value); + + var members = repository.GetByQuery(query); + return members; + } + } + + /// + /// Gets a list of Members with a certain boolean property value + /// + /// + /// + /// + public IEnumerable GetMembersByPropertyValue(string propertyTypeAlias, bool value) + { + using (var repository = _repositoryFactory.CreateMemberRepository(_uowProvider.GetUnitOfWork())) + { + var query = + Query.Builder.Where( + x => + ((Member)x).PropertyTypeAlias == propertyTypeAlias && + ((Member)x).BoolPropertyValue == value); + + var members = repository.GetByQuery(query); + return members; + } + } + + /// + /// Gets a list of Members with a certain date time property value + /// + /// + /// + /// + public IEnumerable GetMembersByPropertyValue(string propertyTypeAlias, DateTime value) + { + using (var repository = _repositoryFactory.CreateMemberRepository(_uowProvider.GetUnitOfWork())) + { + var query = + Query.Builder.Where( + x => + ((Member)x).PropertyTypeAlias == propertyTypeAlias && + ((Member)x).DateTimePropertyValue == value); + + var members = repository.GetByQuery(query); + return members; + } + } + + #endregion + #region IMembershipMemberService Implementation public IMember CreateMember(string username, string email, string password, string memberTypeAlias, int userId = 0) @@ -80,28 +226,6 @@ namespace Umbraco.Core.Services return member; } - public IMember GetByUsername(string userName) - { - using (var repository = _repositoryFactory.CreateMemberRepository(_uowProvider.GetUnitOfWork())) - { - var query = Query.Builder.Where(x => x.Username == userName); - var member = repository.GetByQuery(query).FirstOrDefault(); - - return member; - } - } - - public IMember GetByEmail(string email) - { - using (var repository = _repositoryFactory.CreateMemberRepository(_uowProvider.GetUnitOfWork())) - { - var query = Query.Builder.Where(x => x.Email == email); - var member = repository.GetByQuery(query).FirstOrDefault(); - - return member; - } - } - public IMember GetById(object id) { if (id is int) @@ -117,6 +241,28 @@ namespace Umbraco.Core.Services return null; } + public IMember GetByEmail(string email) + { + using (var repository = _repositoryFactory.CreateMemberRepository(_uowProvider.GetUnitOfWork())) + { + var query = Query.Builder.Where(x => x.Email == email); + var member = repository.GetByQuery(query).FirstOrDefault(); + + return member; + } + } + + public IMember GetByUsername(string userName) + { + using (var repository = _repositoryFactory.CreateMemberRepository(_uowProvider.GetUnitOfWork())) + { + var query = Query.Builder.Where(x => x.Username == userName); + var member = repository.GetByQuery(query).FirstOrDefault(); + + return member; + } + } + public void Delete(IMember member) { var uow = _uowProvider.GetUnitOfWork();