コード例 #1
0
 public CoinTrackingRepository(
     ILogger <CoinTrackingRepository> logger,
     GetTradesRequest getTradesRequest)
 {
     _logger           = logger;
     _getTradesRequest = getTradesRequest;
 }
コード例 #2
0
        public void CoinTrackingRepository_DownloadTrades_ReturnsTrades()
        {
            var loggerFactory = new LoggerFactory().AddConsole();
            var loggerCTR     = loggerFactory.CreateLogger <CoinTrackingRepository>();
            var loggerGTR     = loggerFactory.CreateLogger <GetTradesRequest>();

            // configure options with mock server endpoint
            var options = Options.Create <CoinTrackingOptions>(new CoinTrackingOptions()
            {
                ApiEndpoint = "https://a4d0fe25-fcc4-414c-be2d-9dc8008eb23a.mock.pstmn.io/api/v1/getTradesSuccess", ApiPublicKey = "", ApiPrivateKey = ""
            });

            var jsonSzrSettings = new JsonSerializerSettings();

            jsonSzrSettings.Converters.Add(new BooleanConverter());
            jsonSzrSettings.Converters.Add(new DateTimeConverter());
            jsonSzrSettings.Converters.Add(new GetTradesResponseConverter());

            var getTradesRequest = new GetTradesRequest(loggerGTR, options, jsonSzrSettings);

            var coinTrackingRepo = new CoinTrackingRepository(loggerCTR, getTradesRequest);

            var trades = coinTrackingRepo.DownloadTradesAsync().Result;

            Assert.NotNull(trades);
            Assert.NotEmpty(trades);
            Assert.True(trades.All(t => t.CoinTrackingTradeID > 0));
            Assert.NotNull(trades.FirstOrDefault(t => t.CoinTrackingTradeID == 574026 && t.TradeType == CoinTrackingTrade.TradeTypeEnum.Gift_Or_Tip__In));
        }
コード例 #3
0
        public async Task <GrpcList <PortfolioTrade> > GetTrades(GetTradesRequest request)
        {
            await using var ctx = _contextFactory.Create();

            var entities = await ctx.PortfolioTrades
                           .Where(e => e.DateTime < request.LastSeenDateTime)
                           .OrderByDescending(e => e.DateTime)
                           .Take(request.Take ?? 30)
                           .ToListAsync();

            var data = entities.Select(e => e.AsPortfolioTrade()).ToList();

            return(GrpcList <PortfolioTrade> .Create(data));
        }
コード例 #4
0
        public override Task <Response> GetTrades(GetTradesRequest request, ServerCallContext context)
        {
            var dt = DateTime.Parse(request.From);

            _logger.Write($"Call GetTrades({request.Symbol.Value}, {dt}, {request.Count})");

            try
            {
                _stServer.GetTrades(request.Symbol.Value, dt, request.Count);
            }
            catch (Exception e)
            {
                _logger.Error(e.Message);
            }

            return(Task.FromResult(new Response {
                Queue = TopicName.AddTickHistory
            }));
        }
コード例 #5
0
        public override async Task <GetTradesResponse> GetTrades(GetTradesRequest request, ServerCallContext context)
        {
            var  tradeType     = request.TradeType;
            bool?onlyBuyTrades = null;

            if (tradeType == GrpcContract.Common.TradeType.Buy)
            {
                onlyBuyTrades = true;
            }
            if (tradeType == TradeType.Sell)
            {
                onlyBuyTrades = false;
            }

            var pagination = GrpcMapper.EnsurePagination(request.Pagination);

            var data = await _historyRecordsRepository
                       .GetTradesByWalletAsync(
                Guid.Parse(request.WalletId),
                pagination.Offset,
                pagination.Limit,
                request.AssetPairId,
                request.AssetId,
                request.From?.ToDateTime(),
                request.To?.ToDateTime(),
                onlyBuyTrades);

            var items = data.Select(GrpcMapper.Map).ToArray();

            return(new GetTradesResponse()
            {
                Pagination = new PaginatedInt32Response()
                {
                    Count = items.Length,
                    Offset = pagination.Offset + items.Length
                },
                Items = { items }
            });
        }
コード例 #6
0
        public async Task <TradeInfoState> Sync(Currency currency)
        {
            InitializeDictionaries(currency);

            if (_currencySyncStateDict[currency] != TradeInfoState.NotSynchronized)
            {
                return(_currencySyncStateDict[currency]);
            }

            var storedTransactions = (await _tradeInfoDbService.GetStoredTransactions(currency))?.ToList();

            if (storedTransactions == null)
            {
                storedTransactions = new List <TradeTransaction>();
            }

            var getTradeRequest = new GetTradesRequest(currency)
            {
                SinceTid = storedTransactions.OrderByDescending(t => t.Tid).FirstOrDefault()?.Tid
            };


            var syncFinished = false;

            try
            {
                var i = 1M;
                Console.WriteLine("Starting downloading trades with TID greater than = " + getTradeRequest.SinceTid);

                while (true)
                {
                    var newTransactions = await _apiRequestsManagingService.MakeRequest(
                        o => _publicApiClient.GetData <IEnumerable <TradeTransaction>, GetTradesRequest>(o),
                        getTradeRequest);

                    if (newTransactions == null || newTransactions.Count() == 0)
                    {
                        break;
                    }

                    storedTransactions.AddRange(newTransactions);

                    getTradeRequest.SinceTid = storedTransactions.OrderByDescending(t => t.Tid).FirstOrDefault()?.Tid;

                    Console.WriteLine("Last downloaded TID = " + getTradeRequest.SinceTid);

                    if (i % 100 == 0)
                    {
                        Console.WriteLine("Auto safe - Storing trades in file");

                        await _tradeInfoDbService.SaveTransactions(storedTransactions, currency);
                    }

                    i++;
                }
            }
            catch (Exception exc)
            {
                Console.WriteLine("Error occured: " + exc);

                _currencySyncStateDict[currency] = TradeInfoState.NotSynchronized;

                return(_currencySyncStateDict[currency]);
            }
            finally
            {
                await _tradeInfoDbService.SaveTransactions(storedTransactions, currency);
            }

            _transactionsDict[currency] = storedTransactions;

            //TODO Run background task - getting and synchronizing new data

            _currencySyncStateDict[currency] = TradeInfoState.Synchronized;

            Console.WriteLine("Sync finished successfully!");

            return(_currencySyncStateDict[currency]);
        }