public async Task <ActionResult <IEnumerable <ScorecardInfo> > > GetScorecardsAsync([FromQuery] Guid?courseId)
        {
            var options = new ScorecardsQueryOptions(this.GetPlayerId());

            if (courseId.HasValue)
            {
                options.CourseId = courseId.Value;
            }
            var scorecards = await _queryProcessor.GetScorecardsAsync(options);

            return(Ok(scorecards));
        }
Exemple #2
0
        public async Task <IEnumerable <ScorecardInfo> > GetScorecardsAsync(ScorecardsQueryOptions options)
        {
            // If there's no options get all the player's scorecards.
            if (options == null || (options.CourseId == null && options.From == null && options.To == null))
            {
                return(await GetPlayersEntitiesAsync <ScorecardInfo>(options.PlayerId));
            }

            var filterConditions = new List <string>();

            filterConditions.Add(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, options.PlayerId));

            // Add CourseId filter if applicable.
            if (options.CourseId != null && options.CourseId != Guid.Empty)
            {
                filterConditions.Add(TableQuery.GenerateFilterConditionForGuid("CourseId", QueryComparisons.Equal, options.CourseId.Value));
            }

            // Add From filter if applicable.
            if (options.From != null)
            {
                filterConditions.Add(TableQuery.GenerateFilterConditionForDate("Date", QueryComparisons.GreaterThanOrEqual, options.From.Value));
            }

            // Add To filter if applicable.
            if (options.To != null)
            {
                filterConditions.Add(TableQuery.GenerateFilterConditionForDate("Date", QueryComparisons.LessThanOrEqual, options.To.Value));
            }

            // Build the query.
            var    query  = new TableQuery <ScorecardInfoTableEntity>();
            string filter = null;

            if (filterConditions.Count == 1)
            {
                filter = filterConditions.First();
            }
            else
            {
                filter = TableQuery.CombineFilters(filterConditions[0], TableOperators.And, filterConditions[1]);
                for (int i = 2; i < filterConditions.Count; i++)
                {
                    filter = TableQuery.CombineFilters(filter, TableOperators.And, filterConditions[i]);
                }
            }
            query = query.Where(filter);

            // Execute the query and return ScorecardInfo data.
            var entities = await Options.GetCloudTable(nameof(ScorecardInfo)).ExecuteTableQueryAsync(query);

            return(entities.Select(e => JsonConvert.DeserializeObject <ScorecardInfo>(e.Data)).OrderBy(s => s.Date));
        }
        public async Task <IEnumerable <ScorecardInfo> > GetScorecardsAsync(ScorecardsQueryOptions options)
        {
            var query = Context.Scorecards.AsQueryable();

            if (options?.CourseId == null || options.CourseId == Guid.Empty)
            {
                query = query.Where(s => s.PlayerId == options.PlayerId);
            }
            else
            {
                query = query.Where(s => s.CourseId == options.CourseId);
            }
            if (options.From != null)
            {
                query = query.Where(s => s.Date >= options.From);
            }
            if (options.To != null)
            {
                query = query.Where(s => s.Date <= options.To);
            }

            return(await query.Select(s => new ScorecardInfo(JsonConvert.DeserializeObject <Scorecard>(s.ScorecardData)))
                   .ToArrayAsync());
        }