From 465f1f5db2eed49c919bee9a7a04312fcdb33242 Mon Sep 17 00:00:00 2001 From: Oluwatobi Awe Date: Thu, 27 Jun 2024 11:31:38 +0100 Subject: [PATCH] TD-4273 cache RoleUserGroupDetailForUser data --- .../Services/UserGroupService.cs | 44 +++++++++++-------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/LearningHub.Nhs.WebUI/Services/UserGroupService.cs b/LearningHub.Nhs.WebUI/Services/UserGroupService.cs index ae5b4dd80..6790a3143 100644 --- a/LearningHub.Nhs.WebUI/Services/UserGroupService.cs +++ b/LearningHub.Nhs.WebUI/Services/UserGroupService.cs @@ -51,12 +51,34 @@ public async Task> GetRoleUserGroupDetailAsync() /// public async Task> GetRoleUserGroupDetailForUserAsync(int userId) + { + var cacheKey = $"{userId}:AllRolesWithPermissions"; + return await this.cacheService.GetOrFetchAsync(cacheKey, () => this.FetchRoleUserGroupDetailForUserAsync(userId)); + } + + /// + public async Task UserHasPermissionAsync(string permissionCode) + { + var userGroupsTask = this.GetRoleUserGroupDetailAsync(); + var rolesTask = this.roleService.GetRolesAsync(); + + await Task.WhenAll(userGroupsTask, rolesTask); + + var userRoles = userGroupsTask.Result.Select(t => t.RoleId).Distinct(); + + return rolesTask.Result + .Where(r => userRoles.Contains(r.RoleId)) + .SelectMany(r => r.Permissions) + .Any(p => p == permissionCode); + } + + private async Task> FetchRoleUserGroupDetailAsync() { List viewmodel = null; var client = await this.LearningHubHttpClient.GetClientAsync(); - var request = $"UserGroup/GetUserGroupRoleDetailByUserId/{userId}"; + var request = $"UserGroup/GetUserGroupRoleDetail"; var response = await client.GetAsync(request).ConfigureAwait(false); if (response.IsSuccessStatusCode) @@ -74,29 +96,13 @@ public async Task> GetRoleUserGroupDetailForUserAsy return viewmodel; } - /// - public async Task UserHasPermissionAsync(string permissionCode) - { - var userGroupsTask = this.GetRoleUserGroupDetailAsync(); - var rolesTask = this.roleService.GetRolesAsync(); - - await Task.WhenAll(userGroupsTask, rolesTask); - - var userRoles = userGroupsTask.Result.Select(t => t.RoleId).Distinct(); - - return rolesTask.Result - .Where(r => userRoles.Contains(r.RoleId)) - .SelectMany(r => r.Permissions) - .Any(p => p == permissionCode); - } - - private async Task> FetchRoleUserGroupDetailAsync() + private async Task> FetchRoleUserGroupDetailForUserAsync(int userId) { List viewmodel = null; var client = await this.LearningHubHttpClient.GetClientAsync(); - var request = $"UserGroup/GetUserGroupRoleDetail"; + var request = $"UserGroup/GetUserGroupRoleDetailByUserId/{userId}"; var response = await client.GetAsync(request).ConfigureAwait(false); if (response.IsSuccessStatusCode)