public async Task <PagedForecastingTask> SearchForecastingTaskRecords(SearchForecastingTaskRecords searchRequest) { var taskFields = await _database.GetCollection <Model.ForecastingTaskFieldValues>(searchRequest.TaskEntityName).Find(x => true).ToListAsync(); var filteredRecords = new List <Model.ForecastingTaskFieldValues>(); if (searchRequest.Filters?.Count != 0) { foreach (var filter in searchRequest.Filters.Distinct()) { filteredRecords.AddRange(taskFields.Where(x => x.FieldsValue.Any(x => x.FieldId == filter.FieldId && x.Value.ToLower() == filter.Value.ToLower()))); } } else { filteredRecords = taskFields; } foreach (var taskRecord in filteredRecords) { taskRecord.FieldsValue = taskRecord.FieldsValue.OrderBy(x => x.FieldId).ToList(); } var pagedForecastingTask = new PagedForecastingTask { Name = searchRequest.TaskEntityName, Records = _mapper.Map <List <DomainModel.ForecastingTasks.ForecastingTaskRecord> >(filteredRecords.Skip((searchRequest.PageNumber - 1) * searchRequest.PerPage).Take(searchRequest.PerPage)), TotalCount = filteredRecords.Count }; return(pagedForecastingTask); }
public async Task <PagedForecastingTask> SearchForecastingTaskRecords(SearchForecastingTaskRecords searchRequest) { searchRequest.TaskEntityName = searchRequest.TaskEntityName?.Trim(); if (searchRequest.PageNumber <= 0) { throw new DomainErrorException("Page number should be greater than 0!"); } if (searchRequest.PerPage <= 0) { throw new DomainErrorException("Per page amount should be greater than 0!"); } if (!await DoesForecastingTaskEntityExist(searchRequest.TaskEntityName)) { throw new DomainErrorException($"Forecasting task with name {searchRequest.TaskEntityName} doesn't exist!"); } foreach (var filter in searchRequest.Filters) { filter.Value = filter.Value?.Trim(); } return(await _forecastingTasksRepository.SearchForecastingTaskRecords(searchRequest)); }