public async Task<FileDto> GetAuditLogsToExcel(GetAuditLogsInput input) { var auditLogs = await CreateAuditLogAndUsersQuery(input) .AsNoTracking() .OrderByDescending(al => al.AuditLog.ExecutionTime) .ToListAsync(); var auditLogListDtos = ConvertToAuditLogListDtos(auditLogs); return _auditLogListExcelExporter.ExportToFile(auditLogListDtos); }
public async Task<PagedResultOutput<AuditLogListDto>> GetAuditLogs(GetAuditLogsInput input) { var query = CreateAuditLogAndUsersQuery(input); var resultCount = await query.CountAsync(); var results = await query .AsNoTracking() .OrderBy(input.Sorting) .PageBy(input) .ToListAsync(); var auditLogListDtos = ConvertToAuditLogListDtos(results); return new PagedResultOutput<AuditLogListDto>(resultCount, auditLogListDtos); }
private IQueryable<AuditLogAndUser> CreateAuditLogAndUsersQuery(GetAuditLogsInput input) { var query = from auditLog in _auditLogRepository.GetAll() join user in _userRepository.GetAll() on auditLog.UserId equals user.Id into userJoin from joinedUser in userJoin.DefaultIfEmpty() where auditLog.ExecutionTime >= input.StartDate && auditLog.ExecutionTime < input.EndDate select new AuditLogAndUser {AuditLog = auditLog, User = joinedUser}; query = query .WhereIf(!input.UserName.IsNullOrWhiteSpace(), item => item.User.UserName.Contains(input.UserName)) .WhereIf(!input.ServiceName.IsNullOrWhiteSpace(), item => item.AuditLog.ServiceName.Contains(input.ServiceName)) .WhereIf(!input.MethodName.IsNullOrWhiteSpace(), item => item.AuditLog.MethodName.Contains(input.MethodName)) .WhereIf(!input.BrowserInfo.IsNullOrWhiteSpace(), item => item.AuditLog.BrowserInfo.Contains(input.BrowserInfo)) .WhereIf(input.MinExecutionDuration.HasValue && input.MinExecutionDuration > 0, item => item.AuditLog.ExecutionDuration >= input.MinExecutionDuration.Value) .WhereIf(input.MaxExecutionDuration.HasValue && input.MaxExecutionDuration < int.MaxValue, item => item.AuditLog.ExecutionDuration <= input.MaxExecutionDuration.Value) .WhereIf(input.HasException == true, item => item.AuditLog.Exception != null && item.AuditLog.Exception != "") .WhereIf(input.HasException == false, item => item.AuditLog.Exception == null || item.AuditLog.Exception == ""); return query; }