public async IAsyncEnumerable <ApiFund> GetFunds([FromQuery] ApiCurrencyQueryFilter queryFilter) { await foreach (var fund in fundService .ListFundsAsync(queryFilter.CurrencyCode) .WithCancellation(scopedCancellationToken.Token)) { yield return(MapFund(fund)); } }
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 }); } } }