示例#1
0
    public async Task <IList <AccountDto> > GetAccounts(AccountSearchParameters accountSearchParameters)
    {
        Expression <Func <Account, bool> > predicate = account =>
                                                       (accountSearchParameters.Currencies == null || accountSearchParameters.Currencies.Any(currency => account.Currency.Contains(currency))) &&
                                                       (accountSearchParameters.AccountIds == null || accountSearchParameters.AccountIds.Any(accountId => account.Id == accountId)) &&
                                                       (accountSearchParameters.Exchanges == null || accountSearchParameters.Exchanges.Any(bank => account.Exchange.Contains(bank)));

        var accounts = await _dbRepository
                       .WhereAsync <Account, AccountDto>(predicate);

        if (!accountSearchParameters.MergeAccountsWithSameNameFromDifferentExchanges)
        {
            return(accounts);
        }

        var mergedAccounts = new Dictionary <string, AccountDto>();

        foreach (var account in accounts)
        {
            if (mergedAccounts.TryGetValue(account.Currency, out var mergedAccount))
            {
                mergedAccount.Balance      += account.Balance;
                mergedAccount.Exchange     += $", {account.Exchange}";
                mergedAccount.MergedAccount = true;
            }
            else
            {
                mergedAccounts.Add(account.Currency, account);
            }
        }

        return(mergedAccounts.Values.ToList());
    }
    public async Task <IActionResult> Accounts(AccountSearchParameters accountSearchParameters)
    {
        var accounts = await _accountProvider.GetAccounts(accountSearchParameters);

        return(Ok(accounts));
    }