Esempio n. 1
0
        public WithdrawalHistoryResponse GetWithdrawals([FromUri] GetWithdrawalsRequest request)
        {
            var pageSize = 10;

            var dateTimeOffset = DateTimeOffset.Now.AddYears(-1);

            var filteredQueryable = _paymentQueries.GetOfflineWithdraws()
                                    .Where(o => o.PlayerBankAccount.Player.Id == PlayerId)
                                    .Where(o => o.Created >= dateTimeOffset);

            if (request.StartDate != null)
            {
                filteredQueryable = filteredQueryable
                                    .Where(o => o.Created >= request.StartDate.Value);
            }

            if (request.EndDate != null)
            {
                filteredQueryable = filteredQueryable
                                    .Where(o => o.Created <= request.EndDate.Value);
            }

            var orderedQueryable = filteredQueryable
                                   .OrderByDescending(o => o.Created);

            var withdraws = orderedQueryable
                            .Skip(pageSize * request.Page)
                            .Take(pageSize)
                            .ToList();

            var totalItemsCount = orderedQueryable.Count();

            var result = withdraws.Select(o => new OfflineWithdrawal
            {
                Id                = o.Id,
                Amount            = o.Amount,
                AmountFormatted   = o.Amount.Format(o.PlayerBankAccount.Player.CurrencyCode, false),
                TransactionNumber = o.TransactionNumber,
                Created           = o.Created.ToString("yyyy/MM/dd HH:mm"),
                Status            = o.Status
            });

            return(new WithdrawalHistoryResponse
            {
                Withdrawals = result,
                PageSize = pageSize,
                TotalItemsCount = totalItemsCount
            });
        }
        public async Task <GetWithdrawalsResponse> GetWithdrawals(GetWithdrawalsRequest request)
        {
            request.AddToActivityAsJsonTag("request-data");
            _logger.LogInformation("Receive GetWithdrawals request: {JsonRequest}", JsonConvert.SerializeObject(request));

            if (request.BatchSize % 2 != 0)
            {
                return new GetWithdrawalsResponse
                       {
                           Success      = false,
                           ErrorMessage = "Butch size must be even"
                       }
            }
            ;

            try
            {
                await using var context = new DatabaseContext(_dbContextOptionsBuilder.Options);

                var query = context.Withdrawals.AsNoTracking();

                if (request.LastId > 0)
                {
                    query = query.Where(e => e.Id < request.LastId);
                }

                if (!string.IsNullOrWhiteSpace(request.WalletId))
                {
                    query = query.Where(e => e.WalletId == request.WalletId);
                }

                if (!string.IsNullOrWhiteSpace(request.AssetSymbol))
                {
                    query = query.Where(e => e.AssetSymbol == request.AssetSymbol);
                }

                if (request.WithdrawalStatus != null)
                {
                    query = query.Where(e => e.Status == request.WithdrawalStatus);
                }

                var withdrawals = await query
                                  .OrderByDescending(e => e.Id)
                                  .Take(request.BatchSize)
                                  .ToListAsync();

                var response = new GetWithdrawalsResponse
                {
                    Success = true,
                    WithdrawalCollection = withdrawals.Select(e => new Withdrawal(e)).ToList(),
                    IdForNextQuery       = withdrawals.Count > 0 ? withdrawals.Min(d => d.Id) : 0
                };

                response.WithdrawalCollection.Count.AddToActivityAsTag("response-count-items");
                _logger.LogInformation("Return GetWithdrawals response count items: {count}",
                                       response.WithdrawalCollection.Count);
                return(response);
            }
            catch (Exception exception)
            {
                _logger.LogError(exception,
                                 "Cannot get GetWithdrawals take: {takeValue}, LastId: {LastId}",
                                 request.BatchSize, request.LastId);
                return(new GetWithdrawalsResponse {
                    Success = false, ErrorMessage = exception.Message
                });
            }
        }