Пример #1
0
        public async Task <Result <Category> > GetAsync(Criteria <DateRange> dateRangeCriteria)
        {
            // Validate criteria.
            if (dateRangeCriteria == null)
            {
                return(new Result <Category>()
                {
                    Message = "Invalid criteria"
                });
            }
            if (dateRangeCriteria.Value != null &&
                dateRangeCriteria.Value.From > dateRangeCriteria.Value.To)
            {
                return(new Result <Category>()
                {
                    Message = "Invalid criteria"
                });
            }

            // Fetch the Category.
            var category = await Repository.GetAsync(dateRangeCriteria.PrimaryId);

            if (category == null)
            {
                return(new Result <Category>()
                {
                    Message = "The category could not be found."
                });
            }

            // Finding the Category means success regardless of DataPoint DateRange query result.
            var result = new Result <Category>();

            result.Message = $"{nameof(Category)} '{category.ToString()}' found";
            result.Success = true;
            result.Value   = category;

            // Fetch the DataPoints for the Category with DateRange if requested.
            if (dateRangeCriteria.Value != null)
            {
                var dataPointsQuery = ChildRepository.GetQueryable().Where(d => d.CategoryId == category.Id);
                if (dateRangeCriteria.Value.To > DateTime.MinValue)
                {
                    dataPointsQuery = dataPointsQuery.Where(d => d.Stamp >= dateRangeCriteria.Value.From &&
                                                            d.Stamp <= dateRangeCriteria.Value.To);
                }
                result.Value.DataPoints = (await ChildRepository.GetAsync(dataPointsQuery))?
                                          .OrderBy(d => d.Stamp)
                                          .ToList();
            }

            return(result);
        }