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 }); } }