From 5758e476d247c2b976c9508bc8f10f13ff1e19dd Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 11 Jun 2020 00:00:11 +0800 Subject: [PATCH 1/3] Add phone number filter --- .../Abp/Identity/MongoDB/MongoOrganizationUnitRepository.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoOrganizationUnitRepository.cs b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoOrganizationUnitRepository.cs index 943d570153..448ee5754e 100644 --- a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoOrganizationUnitRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoOrganizationUnitRepository.cs @@ -122,7 +122,8 @@ namespace Volo.Abp.Identity.MongoDB !filter.IsNullOrWhiteSpace(), u => u.UserName.Contains(filter) || - u.Email.Contains(filter) + u.Email.Contains(filter) || + (u.PhoneNumber != null && u.PhoneNumber.Contains(filter)) ) .OrderBy(sorting ?? nameof(IdentityUser.UserName)) .As>() From 9914b09b7f360b11e7b3a4804778c9473ffc1de0 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 11 Jun 2020 08:51:40 +0800 Subject: [PATCH 2/3] The GetMembersCount method add filter --- .../Identity/IOrganizationUnitRepository.cs | 1 + .../EfCoreOrganizationUnitRepository.cs | 41 +++++++++++-------- .../MongoOrganizationUnitRepository.cs | 33 +++++++++------ 3 files changed, 44 insertions(+), 31 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IOrganizationUnitRepository.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IOrganizationUnitRepository.cs index bf698ca54f..6650f62c82 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IOrganizationUnitRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IOrganizationUnitRepository.cs @@ -67,6 +67,7 @@ namespace Volo.Abp.Identity Task GetMembersCountAsync( OrganizationUnit organizationUnit, + string filter = null, CancellationToken cancellationToken = default ); diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreOrganizationUnitRepository.cs b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreOrganizationUnitRepository.cs index 06b2084707..7bdb7d6837 100644 --- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreOrganizationUnitRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreOrganizationUnitRepository.cs @@ -121,33 +121,19 @@ namespace Volo.Abp.Identity.EntityFrameworkCore CancellationToken cancellationToken = default ) { - var query = from userOu in DbContext.Set() - join user in DbContext.Users.IncludeDetails(includeDetails) on userOu.UserId equals user.Id - where userOu.OrganizationUnitId == organizationUnit.Id - select user; + var query = CreateGetMembersFilteredQuery(organizationUnit, filter); - if (!filter.IsNullOrWhiteSpace()) - { - query = query.Where(u => - u.UserName.Contains(filter) || - u.Email.Contains(filter) || - (u.PhoneNumber != null && u.PhoneNumber.Contains(filter)) - ); - } - - return await query.OrderBy(sorting ?? nameof(IdentityUser.UserName)) + return await query.IncludeDetails(includeDetails).OrderBy(sorting ?? nameof(IdentityUser.UserName)) .PageBy(skipCount, maxResultCount) .ToListAsync(GetCancellationToken(cancellationToken)); } public virtual async Task GetMembersCountAsync( OrganizationUnit organizationUnit, + string filter = null, CancellationToken cancellationToken = default) { - var query = from userOu in DbContext.Set() - join user in DbContext.Users on userOu.UserId equals user.Id - where userOu.OrganizationUnitId == organizationUnit.Id - select user; + var query = CreateGetMembersFilteredQuery(organizationUnit, filter); return await query.CountAsync(GetCancellationToken(cancellationToken)); } @@ -175,5 +161,24 @@ namespace Volo.Abp.Identity.EntityFrameworkCore DbContext.Set().RemoveRange(ouMembersQuery); } + + protected virtual IQueryable CreateGetMembersFilteredQuery(OrganizationUnit organizationUnit, string filter = null) + { + var query = from userOu in DbContext.Set() + join user in DbContext.Users on userOu.UserId equals user.Id + where userOu.OrganizationUnitId == organizationUnit.Id + select user; + + if (!filter.IsNullOrWhiteSpace()) + { + query = query.Where(u => + u.UserName.Contains(filter) || + u.Email.Contains(filter) || + (u.PhoneNumber != null && u.PhoneNumber.Contains(filter)) + ); + } + + return query; + } } } diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoOrganizationUnitRepository.cs b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoOrganizationUnitRepository.cs index 448ee5754e..8c163d4126 100644 --- a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoOrganizationUnitRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoOrganizationUnitRepository.cs @@ -116,15 +116,9 @@ namespace Volo.Abp.Identity.MongoDB bool includeDetails = false, CancellationToken cancellationToken = default) { - return await DbContext.Users.AsQueryable() - .Where(u => u.OrganizationUnits.Any(uou => uou.OrganizationUnitId == organizationUnit.Id)) - .WhereIf>( - !filter.IsNullOrWhiteSpace(), - u => - u.UserName.Contains(filter) || - u.Email.Contains(filter) || - (u.PhoneNumber != null && u.PhoneNumber.Contains(filter)) - ) + var query = CreateGetMembersFilteredQuery(organizationUnit, filter); + + return await query .OrderBy(sorting ?? nameof(IdentityUser.UserName)) .As>() .PageBy>(skipCount, maxResultCount) @@ -133,12 +127,12 @@ namespace Volo.Abp.Identity.MongoDB public virtual async Task GetMembersCountAsync( OrganizationUnit organizationUnit, + string filter = null, CancellationToken cancellationToken = default) { - return await DbContext.Users.AsQueryable() - .Where(u => u.OrganizationUnits.Any(uou => uou.OrganizationUnitId == organizationUnit.Id)) - .As>() - .CountAsync(GetCancellationToken(cancellationToken)); + var query = CreateGetMembersFilteredQuery(organizationUnit, filter); + + return await query.CountAsync(GetCancellationToken(cancellationToken)); } public virtual Task RemoveAllRolesAsync(OrganizationUnit organizationUnit, CancellationToken cancellationToken = default) @@ -160,5 +154,18 @@ namespace Volo.Abp.Identity.MongoDB DbContext.Users.ReplaceOne(u => u.Id == user.Id, user); } } + + protected virtual IMongoQueryable CreateGetMembersFilteredQuery(OrganizationUnit organizationUnit, string filter = null) + { + return DbContext.Users.AsQueryable() + .Where(u => u.OrganizationUnits.Any(uou => uou.OrganizationUnitId == organizationUnit.Id)) + .WhereIf>( + !filter.IsNullOrWhiteSpace(), + u => + u.UserName.Contains(filter) || + u.Email.Contains(filter) || + (u.PhoneNumber != null && u.PhoneNumber.Contains(filter)) + ); + } } } From 5f412d860d20a818f48029bd73abedd10415ac8b Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 11 Jun 2020 10:02:28 +0800 Subject: [PATCH 3/3] Add unit test --- .../Identity/OrganizationUnitRepository_Tests.cs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/OrganizationUnitRepository_Tests.cs b/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/OrganizationUnitRepository_Tests.cs index 5ff0284194..0e6717f29c 100644 --- a/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/OrganizationUnitRepository_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/OrganizationUnitRepository_Tests.cs @@ -143,6 +143,19 @@ namespace Volo.Abp.Identity usersCount.ShouldBeGreaterThan(1); } + [Fact] + public async Task GetMembersCountOfOrganizationUnitWithParamsAsync() + { + OrganizationUnit ou = await _organizationUnitRepository.GetAsync("OU111", true); + var usersCount = await _organizationUnitRepository.GetMembersCountAsync(ou,"n"); + + usersCount.ShouldBeGreaterThan(1); + usersCount.ShouldBeLessThanOrEqualTo(5); + + usersCount = await _organizationUnitRepository.GetMembersCountAsync(ou,"undefined-username"); + usersCount.ShouldBe(0); + } + [Fact] public async Task GetRolesCountOfOrganizationUnit() {