Exemplo n.º 1
0
        public async Task UpsertSingleQuoteData_ShouldUpsertSingleQuoteDataAndSaveIntoCache()
        {
            _stockDataRepository.Setup(s => s.UpsertSingleQuoteData(It.IsAny <UpsertSingleQuoteData>())).Returns(Task.FromResult(true));
            var query       = new SingleQuoteQuery(1);
            var queryResult = new SingleQuoteQueryResult("MSFT", _singleQuoteData);
            await _service.UpsertSingleQuoteData(query, queryResult);

            _stockDataRepository.Verify(s => s.UpsertSingleQuoteData(It.Is <UpsertSingleQuoteData>(u => u.SymbolId == query.SymbolId)));
            _cache.TryGet(query.SymbolId, out SingleQuoteQueryResult cachedResult);

            Assert.Equal(queryResult, cachedResult);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Gets the query result from the cache and then database if it doesn't exist.
        /// </summary>
        /// <returns>The <see cref="SingleQuoteQueryResult"/>. If no query result exists, null is returned.</returns>
        public Task <StockQueryResult> GetCachedQueryResult(int symbolId)
        {
            if (_queryResultCache.TryGet(symbolId, out SingleQuoteQueryResult result))
            {
                return(Task.FromResult <StockQueryResult>(result));
            }

            return(Task.FromResult <StockQueryResult>(null));
        }
Exemplo n.º 3
0
        /// <summary>
        /// Gets the single quote stock data for a ticker.
        /// Retrieves from the cache <see cref="SingleQuoteCache"/> if it exists,
        /// otherwise it will fetch from the database.
        ///
        /// If does not exist in the database it will return no data.
        /// Returns empty
        /// </summary>
        /// <param name="ticker"></param>
        /// <returns>The <see cref="StockSingleQuoteDataDTO"/></returns>
        public async Task <StockSingleQuoteDataDTO> GetSingleQuoteData(int symbolId)
        {
            SingleQuoteQueryResult queryResult;
            SingleQuoteData        data;

            if (_singleQuoteCache.TryGet(symbolId, out queryResult))
            {
                return(new StockSingleQuoteDataDTO(symbolId, queryResult.Data));
            }

            data = await _stockDataRepository.GetSingleQuoteData(symbolId);


            if (data != null)
            {
                _singleQuoteCache.Add(symbolId, new SingleQuoteQueryResult(data.Ticker, data));
                return(new StockSingleQuoteDataDTO(symbolId, data));
            }

            return(StockSingleQuoteDataDTO.CreateNoDataExists(symbolId));
        }