public void PlayByPlayQueryParameter_NoParameters() { var parameters = new PlayByPlayQueryParameter(); var errors = parameters.Validate(); Assert.AreEqual(1, errors.Count); }
public void PlayByPlayQueryParameter_InvalidWeekNumber() { var parameters = new PlayByPlayQueryParameter() { Week = 99 }; var errors = parameters.Validate(); Assert.AreEqual(1, errors.Count); }
public void PlayByPlayQueryParameter_InvalidSeason() { var parameters = new PlayByPlayQueryParameter() { Season = 2099 }; var errors = parameters.Validate(); Assert.AreEqual(1, errors.Count); }
public void PlayByPlayQueryParameter_InvalidMultiplePassed() { var parameters = new PlayByPlayQueryParameter() { Season = 2020, Week = 1, Team = "DAL", GameId = "2019_01_ABC_XYZ,2020_02_DE_XYZ" }; var errors = parameters.Validate(); Assert.AreEqual(0, errors.Count); }
public async Task <IActionResult> GetDrives( [FromQuery] PlayByPlayQueryParameter queryParameter, CancellationToken cancellationToken) { var errors = queryParameter.Validate(); if (errors.Count > 0) { return(BadRequestErrorValidation(errors)); } var plays = _pbpService.GetGameDrivesAsync(queryParameter, cancellationToken); _tracer.ActiveSpan.SetTags( HttpContext.Request.GetDisplayUrl(), HttpContext.Connection.RemoteIpAddress?.MapToIPv6().ToString()); return(Ok(plays)); }
public async IAsyncEnumerable <GameDrives> GetGameDrivesAsync( PlayByPlayQueryParameter queryParameter, [EnumeratorCancellation] CancellationToken cancellationToken) { using var scope = _tracer.BuildTrace(nameof(GetGameDrivesAsync)); scope.LogStart(nameof(GetGameDrivesAsync)); await foreach (var game in QueryForGameStats(queryParameter, cancellationToken)) { if (game == null) { continue; } yield return(game.ToGameDrives()); } scope.LogEnd(nameof(GetGameDrivesAsync)); }
private async Task <IList <Game> > GetGamesFromQueryOptions( PlayByPlayQueryParameter queryParameter, CancellationToken cancellationToken) { var scheduleParams = queryParameter.ToScheduleQueryParameters(); var allGames = await _scheduleService.GetGames(scheduleParams, cancellationToken); // Filter by the gameId provided by the client // ReSharper disable once InvertIf if (!string.IsNullOrWhiteSpace(queryParameter.GameId)) { allGames.ToDictionary(x => x.GameId, x => x).TryGetValue(queryParameter.GameId, out var game); return(new List <Game>() { game }); } return(allGames.ToList()); }
private async IAsyncEnumerable <ApiGamePlay> QueryForGameStats( PlayByPlayQueryParameter queryParameter, [EnumeratorCancellation] CancellationToken cancellationToken) { var scope = _tracer.BuildTrace(nameof(QueryForGameStats)); scope.LogStart(nameof(QueryForGameStats)); var games = await GetGamesFromQueryOptions(queryParameter, cancellationToken); games = games.Where(game => game.Gameday < DateTime.UtcNow.Date).ToList(); if (!games.Any()) { yield return(null); } var requests = games .OrderByDescending(game => game.Gameday) .Select(game => _gamePlayRepository.GetGamePlaysAsync(game, cancellationToken)) .ToList(); //Wait for all the requests to finish await Task.WhenAll(requests); //Get the responses foreach (var request in requests) { var pbp = await request; if (pbp.Game == null) { continue; } yield return(new ApiGamePlay(pbp)); } scope.LogEnd(nameof(QueryForGameStats)); }