public async Task <PaginatedResponse <RfqWithPauseSummary> > GetAsync(RfqFilter filter, int skip, int take) { var taken = new List <RfqWithPauseSummary>(); PaginatedResponse <OperationExecutionInfoWithPause <SpecialLiquidationOperationData> > currentBatch; int totalFetched = 0; do { currentBatch = await _operationExecutionInfoRepository.GetRfqAsync( skip + totalFetched, take - taken.Count, filter?.OperationId, filter?.InstrumentId, filter?.AccountId, filter?.MapStates(), filter?.DateFrom, filter?.DateTo); totalFetched += currentBatch.Size; var currentBatchFilteredWithPause = currentBatch .Contents .Select(o => o.ToRfqWithPauseSummary()) .Where(filter.GetApplyPauseFilterFunc()); taken.AddRange(currentBatchFilteredWithPause); } while (taken.Count < take && currentBatch.Size > 0); return(new PaginatedResponse <RfqWithPauseSummary>(taken, skip, taken.Count, currentBatch.TotalSize)); }
public static Func <RfqWithPauseSummary, bool> GetApplyPauseFilterFunc(this RfqFilter filter) { return(o => { if (filter == null) { return true; } if (!filter.CanBePaused.HasValue && !filter.CanBeResumed.HasValue && !filter.CanBeStopped.HasValue ) { return true; } return (filter.CanBePaused.HasValue && o.PauseSummary.CanBePaused == filter.CanBePaused) || (filter.CanBeResumed.HasValue && o.PauseSummary.CanBeResumed == filter.CanBeResumed) || (filter.CanBeStopped.HasValue && o.PauseSummary.CanBeStopped == filter.CanBeStopped); }); }
public static List <SpecialLiquidationOperationState> MapStates(this RfqFilter filter) => filter? .States? .Select(x => (SpecialLiquidationOperationState)x) .ToList();