예제 #1
0
        private async Task <List <ApiTransactionResult> > GetWithdrawals(ApiUserTransactionsRequest request)
        {
            var count       = Math.Min(request.Count ?? 100, 1000);
            var cacheResult = await CacheService.GetOrSetHybridAsync(CacheKey.ApiUserTransactions(request.UserId.ToString(), TransactionType.Withdraw), TimeSpan.FromSeconds(60), async() =>
            {
                using (var context = ExchangeDataContextFactory.CreateReadOnlyContext())
                {
                    return(await context.Withdraw
                           .AsNoTracking()
                           .Where(x => x.UserId == request.UserId)
                           .OrderByDescending(x => x.Id)
                           .Take(1000)
                           .Select(x => new ApiTransactionResult
                    {
                        Amount = x.Amount,
                        Confirmations = x.Confirmations,
                        Currency = x.Currency.Symbol,
                        Fee = 0,
                        Id = x.Id,
                        Status = x.Status.ToString(),
                        Timestamp = x.TimeStamp,
                        TxId = x.Txid,
                        Type = "Withdraw",
                        Address = x.Address
                    }).ToListNoLockAsync().ConfigureAwait(false));
                }
            }).ConfigureAwait(false);

            return(cacheResult);
        }
예제 #2
0
        public async Task <ApiUserTransactionsResponse> GetUserTransactions(ApiUserTransactionsRequest request)
        {
            var count = Math.Min(request.Count ?? 100, 1000);

            if (request.Type == TransactionType.All)
            {
                var deposits = await GetDeposits(request);

                var withdrawals = await GetWithdrawals(request);

                var allTransactions = deposits.Concat(withdrawals).OrderByDescending(x => x.Timestamp);
                return(new ApiUserTransactionsResponse
                {
                    Success = true,
                    Data = allTransactions.Take(count).ToList()
                });
            }
            else if (request.Type == TransactionType.Deposit)
            {
                var deposits = await GetDeposits(request);

                return(new ApiUserTransactionsResponse
                {
                    Success = true,
                    Data = deposits.Take(count).ToList()
                });
            }
            else
            {
                var withdrawals = await GetWithdrawals(request);

                return(new ApiUserTransactionsResponse
                {
                    Success = true,
                    Data = withdrawals.Take(count).ToList()
                });
            }
        }