Ejemplo n.º 1
0
        public async Task <OperationUpdateList> GetBalanceUpdatesAsync(GetOperationsRequest request)
        {
            try
            {
                using var activity = MyTelemetry.StartActivity($"Use DB context {DatabaseContext.Schema}")
                                     ?.AddTag("db-schema", DatabaseContext.Schema);

                await using var ctx = DatabaseContext.Create(_dbContextOptionsBuilder);
                var query = string.IsNullOrWhiteSpace(request.WalletId)
                    ? ctx.OperationHistory
                    : ctx.OperationHistory.Where(e => e.WalletId == request.WalletId);

                if (!string.IsNullOrEmpty(request.AssetId))
                {
                    query = query.Where(e => e.AssetId == request.AssetId);
                }

                if (!request.ShowServiceTypes)
                {
                    query = query.Where(e => e.OperationType != OperationTypes.Unknown);
                }

                query = query
                        .Where(e => e.TimeStamp < request.LastDate)
                        .OrderByDescending(e => e.TimeStamp)
                        .Take(request.BatchSize);

                var list = await query.ToListAsync();

                var resp = new OperationUpdateList()
                {
                    OperationUpdates = new List <OperationUpdate>()
                };
                resp.OperationUpdates.AddRange(list.Select(e => new OperationUpdate(e)));

                if (Program.Settings.ShowSimplexAsDeposits)
                {
                    foreach (var update in resp.OperationUpdates.Where(update => update.OperationType == OperationTypes.SimplexBuy))
                    {
                        update.OperationType = OperationTypes.Deposit;
                    }
                }

                if (Program.Settings.ShowRecurringBuysAsSwaps)
                {
                    foreach (var update in resp.OperationUpdates.Where(update => update.OperationType == OperationTypes.RecurringBuy))
                    {
                        update.OperationType = OperationTypes.Swap;
                    }
                }

                //await _cacheManager.InitializeCacheForWalletAndAssetAsync(request.WalletId, request.AssetId);
                return(resp);
            }
            catch (Exception e)
            {
                _logger.LogError(e,
                                 "Cannot get OperationUpdate for walletId: {walletId}, batch: {batch}, lastDate: {lastDate}",
                                 request.WalletId, request.BatchSize, request.LastDate);

                e.WriteToActivity();
                request.AddToActivityAsJsonTag("request");

                throw;
            }
        }