using MediatR; using mws.backend.dotnet.application.Common; using mws.backend.dotnet.application.Permissions; namespace mws.backend.dotnet.application.Audit; public record GetActionLogsQuery(Guid ActorUserId, ActionLogFilter Filter, int Page, int PageSize) : IRequest>; public class GetActionLogsHandler(IUnitOfWork uow, IPermissionService permissions) : IRequestHandler> { public async Task> Handle(GetActionLogsQuery query, CancellationToken ct) { await permissions.EnsureAsync(query.ActorUserId, "actionlogs", PermissionAction.View, ct); var page = await uow.ActionLogs.SearchAsync(query.Filter, query.Page, query.PageSize, ct); return new PagedResult { Items = page.Items.Select(x => new ActionLogDto { Id = x.Id, ActorUserId = x.ActorUserId, ActorUsername = x.ActorUsername, Action = x.Action, EntityType = x.EntityType, EntityId = x.EntityId, EntityName = x.EntityName, IpAddress = x.IpAddress, UserAgent = x.UserAgent, CreatedAt = x.CreatedAt, }).ToList(), TotalCount = page.TotalCount, Page = page.Page, PageSize = page.PageSize, }; } }