public DepositHistoryResponse GetDeposits([FromUri] GetDepositsRequest request) { var pageSize = 10; var dateTimeOffset = DateTimeOffset.Now.AddYears(-1); var filteredQueryable = _paymentQueries.GetDeposits() .Where(o => o.PlayerId == PlayerId) .Where(o => o.DateSubmitted >= dateTimeOffset); if (request.StartDate != null) { filteredQueryable = filteredQueryable .Where(o => o.DateSubmitted >= request.StartDate.Value); } if (request.EndDate != null) { filteredQueryable = filteredQueryable .Where(o => o.DateSubmitted <= request.EndDate.Value); } if (request.DepositType != null) { filteredQueryable = filteredQueryable .Where(o => o.DepositType == request.DepositType.Value); } var orderedQueryable = filteredQueryable .OrderByDescending(o => o.DateSubmitted); var deposits = orderedQueryable .Skip(pageSize * request.Page) .Take(pageSize) .ToList(); var totalItemsCount = orderedQueryable.Count(); var result = deposits.Select(o => new OfflineDeposit { Id = o.Id, Amount = o.Amount, AmountFormatted = o.Amount.Format(o.CurrencyCode, false), DateCreated = o.DateSubmitted.ToString("yyyy/MM/dd HH:mm"), DepositType = o.DepositType.ToString(), ReferenceCode = o.ReferenceCode, UnverifyReason = o.UnverifyReason?.ToDescription(), Status = o.Status }); return(new DepositHistoryResponse { Deposits = result, PageSize = pageSize, TotalItemsCount = totalItemsCount }); }
public async Task <GetDepositsResponse> GetDeposits(GetDepositsRequest request) { request.AddToActivityAsJsonTag("request-data"); _logger.LogInformation("Receive GetDeposits request: {JsonRequest}", JsonConvert.SerializeObject(request)); if (request.BatchSize % 2 != 0) { return new GetDepositsResponse { Success = false, ErrorMessage = "Butch size must be even" } } ; try { await using var context = new DatabaseContext(_dbContextOptionsBuilder.Options); var query = context.Deposits.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); } var deposits = await query .OrderByDescending(e => e.Id) .Take(request.BatchSize) .ToListAsync(); var response = new GetDepositsResponse { Success = true, DepositCollection = deposits.Select(e => new Deposit(e)).ToList(), IdForNextQuery = deposits.Count > 0 ? deposits.Min(d => d.Id) : 0 }; response.DepositCollection.Count.AddToActivityAsTag("response-count-items"); _logger.LogInformation("Return GetDeposits response count items: {count}", response.DepositCollection.Count); return(response); } catch (Exception exception) { _logger.LogError(exception, "Cannot get GetDeposits take: {takeValue}, LastId: {LastId}", request.BatchSize, request.LastId); return(new GetDepositsResponse { Success = false, ErrorMessage = exception.Message }); } }