From 8916163e6006d83eab253b71926e178cefbdbaaf Mon Sep 17 00:00:00 2001 From: Rex Lorenzo Date: Tue, 12 May 2026 23:47:14 -0700 Subject: [PATCH] refactor: tighten foreach-to-LINQ where it improves the call site --- .../CTS/Controllers/AssessmentController.cs | 9 ++--- web/Areas/CTS/Services/CrestCourseService.cs | 36 +++++++++---------- .../Controllers/RoleTemplatesController.cs | 7 ++-- web/Areas/RAPS/Services/RoleViews.cs | 16 ++++----- web/Classes/UserHelper.cs | 17 +-------- 5 files changed, 31 insertions(+), 54 deletions(-) diff --git a/web/Areas/CTS/Controllers/AssessmentController.cs b/web/Areas/CTS/Controllers/AssessmentController.cs index 3d8f8a3dd..db9059d72 100644 --- a/web/Areas/CTS/Controllers/AssessmentController.cs +++ b/web/Areas/CTS/Controllers/AssessmentController.cs @@ -135,15 +135,12 @@ public async Task>> GetAssessments(int? typ var assessmentsList = await assessments .ToListAsync(); - List studentAssessments = new(); - foreach (var a in assessmentsList) + return assessmentsList.Select(a => { var sa = CreateStudentAssessment(a); sa.Editable = ctsSecurityService.CanEditStudentAssessment(sa.EnteredBy, sa.EnteredOn); - studentAssessments.Add(sa); - } - - return studentAssessments; + return sa; + }).ToList(); } [HttpGet("assessors")] diff --git a/web/Areas/CTS/Services/CrestCourseService.cs b/web/Areas/CTS/Services/CrestCourseService.cs index 037898943..c400de559 100644 --- a/web/Areas/CTS/Services/CrestCourseService.cs +++ b/web/Areas/CTS/Services/CrestCourseService.cs @@ -72,16 +72,16 @@ public async Task> GetSessions(int courseId) /// static private List CourseSessionOfferingsToCourses(List csos) { - List courses = new(); - foreach (var cso in csos.GroupBy(c => c.CourseId)) - { - var rows = cso.ToList(); - courses.Add(new Course(rows[0]) + return csos.GroupBy(c => c.CourseId) + .Select(g => { - Sessions = CourseSessionOfferingsToSessions(rows) - }); - } - return courses; + var rows = g.ToList(); + return new Course(rows[0]) + { + Sessions = CourseSessionOfferingsToSessions(rows) + }; + }) + .ToList(); } /// @@ -91,16 +91,16 @@ static private List CourseSessionOfferingsToCourses(List static private List CourseSessionOfferingsToSessions(List csos) { - List sessions = new(); - foreach (var cso in csos.GroupBy(c => c.SessionId)) - { - var rows = cso.ToList(); - sessions.Add(new Session(rows[0]) + return csos.GroupBy(c => c.SessionId) + .Select(g => { - Offerings = CourseSessionOfferingsToOfferings(rows) - }); - } - return sessions; + var rows = g.ToList(); + return new Session(rows[0]) + { + Offerings = CourseSessionOfferingsToOfferings(rows) + }; + }) + .ToList(); } /// diff --git a/web/Areas/RAPS/Controllers/RoleTemplatesController.cs b/web/Areas/RAPS/Controllers/RoleTemplatesController.cs index d6c57c7b3..c6dff7dca 100644 --- a/web/Areas/RAPS/Controllers/RoleTemplatesController.cs +++ b/web/Areas/RAPS/Controllers/RoleTemplatesController.cs @@ -126,12 +126,9 @@ public async Task> RoleTemplateApply(stri } RoleMemberService roleMemberService = new(_context); - foreach (RoleApplyPreview role in preview.Roles) + foreach (RoleApplyPreview role in preview.Roles.Where(r => !r.UserHasRole)) { - if (!role.UserHasRole) - { - await roleMemberService.AddMemberToRole(role.RoleId, memberId, null, null, string.Format("Added via role template {0}", roleTemplate.TemplateName)); - } + await roleMemberService.AddMemberToRole(role.RoleId, memberId, null, null, string.Format("Added via role template {0}", roleTemplate.TemplateName)); } _rapsCacheService.ClearCachedRolesAndPermissionsForUser(memberId); diff --git a/web/Areas/RAPS/Services/RoleViews.cs b/web/Areas/RAPS/Services/RoleViews.cs index 4fd457b48..fb528d3cd 100644 --- a/web/Areas/RAPS/Services/RoleViews.cs +++ b/web/Areas/RAPS/Services/RoleViews.cs @@ -86,14 +86,12 @@ public async Task> UpdateRole(TblRole role, List? messages //Remove members that were added via this view if they are no longer in the view. Check first that the view is not empty. if (members.Count > 0) { - foreach (TblRoleMember roleMember in roleMembers) + foreach (TblRoleMember roleMember in roleMembers.Where(rm => !string.IsNullOrEmpty(rm.MemberId.Trim()) + && !members.Contains(rm.MemberId) + && rm.ViewName == role.ViewName)) { - if (!string.IsNullOrEmpty(roleMember.MemberId.Trim()) && !members.Contains(roleMember.MemberId) - && roleMember.ViewName == role.ViewName) - { - messages.Add(string.Format("Removing {0}", roleMember.MemberId)); - toDelete.Add(roleMember); - } + messages.Add(string.Format("Removing {0}", roleMember.MemberId)); + toDelete.Add(roleMember); } } else @@ -212,7 +210,7 @@ private async Task> GetRoleMembers(int roleId) "vw_vmdo_sp" => await _RAPSContext.VwVmdoSps.AsNoTracking().Select(v => v.MemberId).ToListAsync(), "vw_vmdo_svm_it" => await _RAPSContext.VwVmdoSvmIts.AsNoTracking().Select(v => v.MemberId).ToListAsync(), "vw_vmthadmissions" => await _RAPSContext.VwVmthadmissions.AsNoTracking().Select(v => v.MemberId).ToListAsync(), - "vw_vmth_chiefs" => await _RAPSContext.VwVmthChiefs.AsNoTracking().Select(v => v.MemberId).ToListAsync(), + "vw_vmth_chiefs" => await _RAPSContext.VwVmthChiefs.AsNoTracking().Select(v => v.MemberId).ToListAsync(), "vw_vmth_clinicians" => await _RAPSContext.VwVmthClinicians.AsNoTracking().Select(v => v.MemberId).ToListAsync(), "vw_vmth_constituents" => await _RAPSContext.VwVmthConstituents.AsNoTracking().Select(v => v.MemberId).ToListAsync(), "vw_vmthinternsmanual" => await _RAPSContext.VwVmthinternsManuals.AsNoTracking().Select(v => v.MemberId).ToListAsync(), @@ -225,5 +223,5 @@ private async Task> GetRoleMembers(int roleId) _ => new List(), }; } - } + } } diff --git a/web/Classes/UserHelper.cs b/web/Classes/UserHelper.cs index 88853d526..090a2c94c 100644 --- a/web/Classes/UserHelper.cs +++ b/web/Classes/UserHelper.cs @@ -96,22 +96,7 @@ public bool IsInRole(RAPSContext rapsContext, AaudUser user, string roleName) if (user.LoginId == HttpHelper.HttpContext?.User?.Identity?.Name) { var claims = HttpHelper.HttpContext?.User?.Claims; - - if (claims != null) - { - - foreach (var claim in claims) - { - if (claim.Type == ClaimTypes.Role && claim.Value == roleName) - { - return true; - } - - } - - } - - return false; + return claims?.Any(c => c.Type == ClaimTypes.Role && c.Value == roleName) == true; } else {