public ActionResult <List <StockResponse> > Get([FromQuery] string query, [FromQuery] DateTime?date, [FromQuery] DateTime?fromDate, [FromQuery] DateTime?toDate) { IEnumerable <Stock> stocks = null; Date resultDate; if ((date != null) && (fromDate != null) && (toDate != null)) { return(BadRequest("Cannot specify a date and a date range")); } if (query == null) { if (date != null) { resultDate = DateFromParameter(date); stocks = _StockQuery.All(resultDate); } else if ((fromDate != null) || (toDate != null)) { var dateRange = DateRangeFromParameter(fromDate, toDate); resultDate = dateRange.ToDate; stocks = _StockQuery.All(dateRange); } else { stocks = _StockQuery.All(); resultDate = Date.Today; } } else { if (date != null) { resultDate = DateFromParameter(date); stocks = _StockQuery.Find(resultDate, x => MatchesQuery(x, query)); } else if ((fromDate != null) || (toDate != null)) { var dateRange = DateRangeFromParameter(fromDate, toDate); resultDate = dateRange.ToDate; stocks = _StockQuery.Find(dateRange, x => MatchesQuery(x, query)); } else { stocks = _StockQuery.Find(x => MatchesQuery(x, query)); resultDate = Date.Today; } } return(Ok(stocks.Select(x => x.ToResponse(resultDate)).ToList())); }
public ServiceResult ListStock(Guid id, string asxCode, string name, Date listingDate, bool trust, AssetCategory category) { // Check that id is unique var stock = _StockRepository.Get(id); if (stock != null) { return(ServiceResult.Error("A stock with id {0} already exists", id)); } // Check if stock already exists with this code var effectivePeriod = new DateRange(listingDate, Date.MaxValue); if (_StockQuery.Find(effectivePeriod, y => y.AsxCode == asxCode).Any()) { return(ServiceResult.Error("A stock already exists with the code {0} on {1}", asxCode, listingDate.ToShortDateString())); } stock = new Stock(id); stock.List(asxCode, name, listingDate, trust, category); _StockRepository.Add(stock); _StockCache.Add(stock); var stockPriceHistory = new StockPriceHistory(id); _StockPriceHistoryRepository.Add(stockPriceHistory); _StockPriceHistoryCache.Add(stockPriceHistory); stock.SetPriceHistory(stockPriceHistory); return(ServiceResult.Ok()); }