namespace SharepointToolbox.Web.Core.Models; public record PermissionSummary( string Label, RiskLevel RiskLevel, int Count, int DistinctUsers ); public static class PermissionSummaryBuilder { private static readonly Dictionary Labels = new() { [RiskLevel.High] = "High Risk", [RiskLevel.Medium] = "Medium Risk", [RiskLevel.Low] = "Low Risk", [RiskLevel.ReadOnly] = "Read Only", }; public static IReadOnlyList Build(IEnumerable entries) { var grouped = entries.GroupBy(e => e.RiskLevel).ToDictionary(g => g.Key, g => g.ToList()); return Enum.GetValues().Select(level => { var items = grouped.GetValueOrDefault(level, new List()); var distinctUsers = items .SelectMany(e => e.UserLogins.Split(';', StringSplitOptions.RemoveEmptyEntries)) .Select(u => u.Trim()).Where(u => u.Length > 0) .Distinct(StringComparer.OrdinalIgnoreCase).Count(); return new PermissionSummary(Labels[level], level, items.Count, distinctUsers); }).ToList(); } }