public async IAsyncEnumerable <ApiFund> GetFunds([FromQuery] ApiCurrencyQueryFilter queryFilter)
 {
     await foreach (var fund in fundService
                    .ListFundsAsync(queryFilter.CurrencyCode)
                    .WithCancellation(scopedCancellationToken.Token))
     {
         yield return(MapFund(fund));
     }
 }
예제 #2
0
        public async IAsyncEnumerable <IInvestment> ListInvestmentsAsync(EthereumAddress address, CurrencyCode currencyCode)
        {
            await foreach (var fund in fundService
                           .ListFundsAsync(currencyCode)
                           .WithCancellation(CancellationToken))
            {
                var tokenCount = await quantityProviderFactory
                                 .CreateProvider(fund.Token.Symbol.ToString())
                                 .GetContractBalanceAsync(fund.Token.ContractAddress, address, fund.Token.Decimals);

                if (tokenCount > decimal.Zero)
                {
                    yield return(new BusinessInvestment()
                    {
                        Fund = fund,
                        Held = tokenCount
                    });
                }
                else
                {
                    var isLegacy = false;

                    await foreach (var transaction in Transactions
                                   .ListInboundTransactionsAsync(fund.Token.Symbol, address)
                                   .WithCancellation(CancellationToken))
                    {
                        isLegacy = true;
                        break;
                    }

                    if (!isLegacy)
                    {
                        await foreach (var transaction in Transactions
                                       .ListOutboundTransactionsAsync(fund.Token.Symbol, address)
                                       .WithCancellation(CancellationToken))
                        {
                            isLegacy = true;
                            break;
                        }
                    }

                    if (isLegacy)
                    {
                        yield return(new BusinessInvestment()
                        {
                            Fund = fund,
                            Held = decimal.Zero,
                            Legacy = isLegacy
                        });
                    }
                }
            }

            await foreach (var stake in stakeService
                           .ListStakesAsync(currencyCode)
                           .WithCancellation(CancellationToken))
            {
                var tokenCount = await quantityProviderFactory
                                 .CreateProvider(stake.Token.Symbol.ToString())
                                 .GetContractBalanceAsync(stake.Token.ContractAddress, address, stake.Token.Decimals);

                if (tokenCount > decimal.Zero)
                {
                    yield return(new BusinessInvestment()
                    {
                        Fund = MapStakeToFund(stake),
                        Held = tokenCount
                    });
                }
            }
        }