using System.Linq; using System.Threading.Tasks; using Data.Abstractions; using Data.Models; using Microsoft.EntityFrameworkCore; using SharedLibraryCore.Dtos.Meta.Responses; using SharedLibraryCore.Helpers; using SharedLibraryCore.Interfaces; using SharedLibraryCore.QueryHelper; namespace IW4MAdmin.Application.Meta; public class PermissionLevelChangedResourceQueryHelper : IResourceQueryHelper { private readonly IDatabaseContextFactory _contextFactory; public PermissionLevelChangedResourceQueryHelper(IDatabaseContextFactory contextFactory) { _contextFactory = contextFactory; } public async Task> QueryResource( ClientPaginationRequest query) { await using var context = _contextFactory.CreateContext(); var auditEntries = context.EFChangeHistory.Where(change => change.TargetEntityId == query.ClientId) .Where(change => change.TypeOfChange == EFChangeHistory.ChangeType.Permission) .OrderByDescending(change => change.TimeChanged); var audits = from change in auditEntries join client in context.Clients on change.OriginEntityId equals client.ClientId select new PermissionLevelChangedResponse { ChangedById = change.OriginEntityId, ChangedByName = client.CurrentAlias.Name, PreviousPermissionLevelValue = change.PreviousValue, CurrentPermissionLevelValue = change.CurrentValue, When = change.TimeChanged, ClientId = change.TargetEntityId, IsSensitive = true }; return new ResourceQueryHelperResult { Results = await audits.Skip(query.Offset).Take(query.Count).ToListAsync() }; } }