public async Task <LogItemPaging> GetLogsAsync(LogItemPaging filter) { var search = filter.Search.SplitBySpaces(); var startDate = filter.StartDate?.ToUniversalTime(); var endDate = filter.EndDate?.ToUniversalTime(); var where = new List <Expression <Func <LogItem, bool> > >(); where.AddIfTrue(startDate.HasValue, x => startDate <= x.DateCreated); where.AddIfTrue(endDate.HasValue, x => x.DateCreated <= endDate); where.AddIfTrue(filter.LogType.HasValue, x => filter.LogType == x.LogType); where.AddIfTrue(search.Any(), x => search.All(s => x.Action.Contains(s))); foreach (var filterAdditionalInfoLogItem in filter.AdditionalInfoLogItems) { switch (filterAdditionalInfoLogItem.Type) { case AdditionalInfoLogItemFilterType.Contains: where.Add(x => x.AdditionalInfoLogItems.FirstOrDefault(i => i.Name == filterAdditionalInfoLogItem.Name).Value.Contains(filterAdditionalInfoLogItem.Value)); break; case AdditionalInfoLogItemFilterType.Equal: where.Add(x => x.AdditionalInfoLogItems.FirstOrDefault(i => i.Name == filterAdditionalInfoLogItem.Name).Value == filterAdditionalInfoLogItem.Value); break; case AdditionalInfoLogItemFilterType.StartWith: where.Add(x => x.AdditionalInfoLogItems.FirstOrDefault(i => i.Name == filterAdditionalInfoLogItem.Name).Value.StartsWith(filterAdditionalInfoLogItem.Value)); break; case AdditionalInfoLogItemFilterType.EndWith: where.Add(x => x.AdditionalInfoLogItems.FirstOrDefault(i => i.Name == filterAdditionalInfoLogItem.Name).Value.EndsWith(filterAdditionalInfoLogItem.Value)); break; } } Action <IMapperConfigurationExpression> configurationProvider = config => { config.CreateMap <LogItem, LogItemDto>(); }; Expression <Func <LogItem, bool> > checkPermission = item => item.AppName == _options.AppName; var request = GetPage(filter, checkPermission, where, configurationProvider); await filter.SetResult(request); return(filter); }
public Task <LogItemPaging> GetLogsAsync(LogItemPaging filter) { return(_logRepository.GetLogsAsync(filter)); }