public async Task <PartialCollectionResponse <AllotmentEventResponse> > GetAsync([FromQuery] QueryAllotmentEventsRequest request) { var filterStatuses = request.AllotmentEventStatuses ?? new AllotmentEventStatus[0]; var query = new AllotmentEventsQuery(filterStatuses, new long[0], request.Offset, request.Count); var result = await _allotmentEventService.QueryAsync(query); return(result.ToPartialCollectionResponse(x => AllotmentEventResponse.Create(x, _clock.UtcNow))); }
public Task <PagingCollection <AllotmentEvent> > QueryAsync(AllotmentEventsQuery query, DateTimeOffset now) { var queryable = Entities() .Where(e => (query.AllotmentEventStatuses.Count == 0 || query.AllotmentEventStatuses.Contains(e.Status) && !(e.Status == AllotmentEventStatus.InProgress && e.FinishDate <= now) || query.AllotmentEventStatuses.Contains(AllotmentEventStatus.Finished) && e.Status == AllotmentEventStatus.InProgress && e.FinishDate <= now) && (query.Ids.Count == 0 || query.Ids.Contains(e.Id))) .OrderByDescending(i => i.CreatedDate); return(queryable.GetPageAsync(query.Offset, query.Count)); }
public async Task <PagingCollection <AllotmentEvent> > QueryAsync(AllotmentEventsQuery query) { var events = await _allotmentEventRepository.QueryAsync(query, _clock.UtcNow); var eventsWithEventAddresses = events.Where(i => i.EventContractAddress != null && i.TokenContractAddress != null).ToArray(); var balances = await _erc223ContractClient.GetTokensBalancesAsync(eventsWithEventAddresses.Select(i => new TokenHolder(i.TokenContractAddress, i.EventContractAddress)).ToArray()); foreach (var allotmentEvent in events) { if (allotmentEvent.GetActualStatus(_clock.UtcNow) != AllotmentEventStatus.Finished) { var balance = balances.FirstOrDefault(i => i.TokenHolder.HolderAddress == allotmentEvent.EventContractAddress && i.TokenHolder.TokenAddress == allotmentEvent.TokenContractAddress); allotmentEvent.TotalTokensToDistribute = balance?.Balance.ToString(); } } return(events); }