public CoinTrackingRepository( ILogger <CoinTrackingRepository> logger, GetTradesRequest getTradesRequest) { _logger = logger; _getTradesRequest = getTradesRequest; }
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)); }
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)); }
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 })); }
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 } }); }
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]); }