From 424d64e23a9d9921c86b00f91dacf84ce72616e4 Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Wed, 20 May 2020 11:59:50 +0300 Subject: [PATCH] Updated OrganizationUnitRepository Added GetRolesCount and tests --- .../Abp/Identity/IOrganizationUnitRepository.cs | 5 +++++ .../EfCoreOrganizationUnitRepository.cs | 12 ++++++++++++ .../MongoDB/MongoOrganizationUnitRepository.cs | 15 ++++++++++++++- .../Identity/OrganizationUnitRepository_Tests.cs | 15 ++++++++++++--- 4 files changed, 43 insertions(+), 4 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 c4867420ed..def41cdc8a 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 @@ -50,6 +50,11 @@ namespace Volo.Abp.Identity CancellationToken cancellationToken = default ); + Task GetRolesCountAsync( + OrganizationUnit organizationUnit, + CancellationToken cancellationToken = default + ); + Task> GetMembersAsync( OrganizationUnit organizationUnit, string sorting = null, 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 180d011810..350f64ffe7 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 @@ -99,6 +99,18 @@ namespace Volo.Abp.Identity.EntityFrameworkCore return await query.ToListAsync(GetCancellationToken(cancellationToken)); } + public virtual async Task GetRolesCountAsync( + OrganizationUnit organizationUnit, + CancellationToken cancellationToken = default) + { + var query = from organizationRole in DbContext.Set() + join role in DbContext.Roles on organizationRole.RoleId equals role.Id + where organizationRole.OrganizationUnitId == organizationUnit.Id + select role; + + return await query.CountAsync(GetCancellationToken(cancellationToken)); + } + public virtual async Task> GetMembersAsync( OrganizationUnit organizationUnit, string sorting = null, 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 666af68e8b..ae735300fd 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 @@ -91,6 +91,17 @@ namespace Volo.Abp.Identity.MongoDB .PageBy>(skipCount, maxResultCount) .ToListAsync(cancellationToken); } + + public virtual async Task GetRolesCountAsync( + OrganizationUnit organizationUnit, + CancellationToken cancellationToken = default) + { + var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToArray(); + return await DbContext.Roles.AsQueryable().Where(r => roleIds.Contains(r.Id)) + .As>() + .CountAsync(cancellationToken); + } + public virtual async Task> GetMembersAsync( OrganizationUnit organizationUnit, string sorting = null, @@ -114,7 +125,9 @@ namespace Volo.Abp.Identity.MongoDB .ToListAsync(GetCancellationToken(cancellationToken)); } - public virtual async Task GetMembersCountAsync(OrganizationUnit organizationUnit, CancellationToken cancellationToken = default) + public virtual async Task GetMembersCountAsync( + OrganizationUnit organizationUnit, + CancellationToken cancellationToken = default) { return await DbContext.Users.AsQueryable() .Where(u => u.OrganizationUnits.Any(uou => uou.OrganizationUnitId == organizationUnit.Id)) 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 a6cd719e1f..6f6835396d 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 @@ -135,12 +135,21 @@ namespace Volo.Abp.Identity } [Fact] - public async Task GetCountMembersCountInOrganizationUnit() + public async Task GetMembersCountOfOrganizationUnit() { OrganizationUnit ou = await _organizationUnitRepository.GetAsync("OU111", true); - var users = await _organizationUnitRepository.GetMembersCountAsync(ou); + var usersCount = await _organizationUnitRepository.GetMembersCountAsync(ou); - users.ShouldBeGreaterThan(1); + usersCount.ShouldBeGreaterThan(1); + } + + [Fact] + public async Task GetRolesCountOfOrganizationUnit() + { + OrganizationUnit ou = await _organizationUnitRepository.GetAsync("OU111", true); + var rolesCount = await _organizationUnitRepository.GetRolesCountAsync(ou); + + rolesCount.ShouldBeGreaterThan(1); } } }