public StockController(ILogger <StockController> logger, StockRepository stockRepository, StockInfoRepository stockInfoRepository, StockApiRepository stockApiRepository) { _logger = logger; _stockRepository = stockRepository; _stockInfoRepository = stockInfoRepository; _stockApiRepository = stockApiRepository; }
private static async Task RunAsync() { int loadedCount = 0; int deadLetterCount = 0; IClientAsyncRepository clientRepository = new ClientApiRepository(_clientApiUrl); IStockAsyncRepository stockRepository = new StockApiRepository(_stockApiUrl); ITradeAsyncRepository tradeRepository = new TradeApiRepository(_tradeApiUrl); IDeadLetterAsyncRepository letterRepository = new DeadLetterApiRepository(_tradeApiUrl); // Open Feed IJsonFeed feed = new JsonMock.JsonFeed(); if (feed.Status != IJsonFeed.StatusCode.Ok) { Console.WriteLine("*** Trade Feed could not be opened ***"); Console.WriteLine(feed.Error); return; } // Read Json Data List <TradeFeed> trades = feed.GetTradeFeedData(); if (feed.Status != IJsonFeed.StatusCode.Ok) { Console.WriteLine("*** Trade Feed could not be processed - trades added to dead letter queue ***"); Console.WriteLine(feed.Error); DeadLetter dl = new DeadLetter() { Body = feed.DeadLetter, Message = feed.Error }; await letterRepository.CreateDeadLetterAsync(dl); return; } // Process Json Data foreach (TradeFeed trade in trades) { string error = ValidateTrade(trade); if (!string.IsNullOrEmpty(error)) { DeadLetter dlr = new DeadLetter() { Body = JsonConvert.SerializeObject(trade), Message = error }; await letterRepository.CreateDeadLetterAsync(dlr); deadLetterCount++; } else { //Check if Stock Exists and add if not Stock stock = await stockRepository.GetStockAsync(Int32.Parse(trade.StockId)); if (string.IsNullOrEmpty(stock.Name)) { stock.Id = Int32.Parse(trade.StockId); stock.Name = trade.StockName; stock.Type = trade.StockType; await stockRepository.CreateStockAsync(stock); } //Check if Client exists and add if not Client client = await clientRepository.GetClientAsync(Int32.Parse(trade.ClientId)); if (string.IsNullOrEmpty(client.Name)) { client.Id = Int32.Parse(trade.ClientId); client.Name = trade.ClientName; await clientRepository.CreateClientAsync(client); } Trade tr = new Trade() { StockId = Int32.Parse(trade.StockId), ClientId = Int32.Parse(trade.ClientId), Venue = trade.VenueName, Quantity = Int32.Parse(trade.Quantity), Price = decimal.Parse(trade.Price), BuySell = trade.BuySell.ToUpper() }; await tradeRepository.CreateTradeAsync(tr); loadedCount++; } } Console.WriteLine("Finished Processing Feed, {0} trades added, {1} dead letters added", loadedCount.ToString(), deadLetterCount.ToString()); }
public void OneTimeSetup() { _investagramsApiRepository = new StockApiRepository(_cookieProviderService); }