Exemplo n.º 1
0
 public StockController(ILogger <StockController> logger, StockRepository stockRepository, StockInfoRepository stockInfoRepository, StockApiRepository stockApiRepository)
 {
     _logger              = logger;
     _stockRepository     = stockRepository;
     _stockInfoRepository = stockInfoRepository;
     _stockApiRepository  = stockApiRepository;
 }
Exemplo n.º 2
0
        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);
 }