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);
        }
Esempio n. 5
0
        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));
        }
Esempio n. 6
0
        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));
        }
Esempio n. 7
0
        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());
        }
Esempio n. 8
0
        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));
        }