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)); }
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()); }