Ejemplo n.º 1
0
        public async Task <IActionResult> AddGameSummary([FromBody] CreateGameSummaryRequest request)
        {
            BaseballPlayRM lastPlayOfGame = null;
            var            lastPlayKey    = Dictionaries.cdBaseballPlayRM.Keys.FirstOrDefault(k => k.StartsWith(request.RetrosheetGameId));

            if (!string.IsNullOrEmpty(lastPlayKey))
            {
                Dictionaries.cdBaseballPlayRM.TryRemove(lastPlayKey, out lastPlayOfGame);
            }

            if (lastPlayOfGame == null || !lastPlayOfGame.EndOfGame)
            {
                request.HasValidationErrors = true;
            }
            else
            {
                request.HasValidationErrors = false;
                request.HomeTeamFinalScore  = lastPlayOfGame.EndOfPlay_HomeScore;
                request.AwayTeamFinalScore  = lastPlayOfGame.EndOfPlay_VisitorScore;
                request.HomeTeamBatsFirst   = (lastPlayOfGame.TeamAtBat == "V" && lastPlayOfGame.IsBottomHalf == true) || (lastPlayOfGame.TeamAtBat == "H" && lastPlayOfGame.IsBottomHalf == false);
            }
            request.GameDay = request.RetrosheetGameId.Substring(3, 8);
            var cmd = _mapper.Map <CreateGameSummaryCommand>(request);
            await _commandSender.Send(cmd);

            return(Ok());
        }
Ejemplo n.º 2
0
        public static PLayersOnField EndOfPlay(BaseballPlayRM play, List <LineupRM> lineup)
        {
            if (play == null || lineup == null || lineup.Count == 0 || play.RetrosheetGameId != lineup[0].RetrosheetGameId)
            {
                throw new System.Exception("Invalid play or lineup");
            }

            PLayersOnField players = new PLayersOnField();

            players.RetrosheetGameId = play.RetrosheetGameId;
            players.EventNumber      = play.EventNumber;
            players.IsStartOfPlay    = false;
            players.inning           = play.Inning;
            players.outs             = play.EndOfPlay_Outs;
            players.TeamAtBat        = play.TeamAtBat;
            players.HomeTeamScore    = play.EndOfPlay_HomeScore;
            players.AwayTeamScore    = play.EndOfPlay_VisitorScore;
            players.Pitcher          = FindDefender(1, play.TeamAtBat, lineup[play.LineupChangeSequence - 1]);
            players.Catcher          = FindDefender(2, play.TeamAtBat, lineup[play.LineupChangeSequence - 1]);
            players.FirstBaseman     = FindDefender(3, play.TeamAtBat, lineup[play.LineupChangeSequence - 1]);
            players.SecondBaseman    = FindDefender(4, play.TeamAtBat, lineup[play.LineupChangeSequence - 1]);
            players.ThirdBaseman     = FindDefender(5, play.TeamAtBat, lineup[play.LineupChangeSequence - 1]);
            players.ShortStop        = FindDefender(6, play.TeamAtBat, lineup[play.LineupChangeSequence - 1]);
            players.LeftFielder      = FindDefender(7, play.TeamAtBat, lineup[play.LineupChangeSequence - 1]);
            players.CenterFielder    = FindDefender(8, play.TeamAtBat, lineup[play.LineupChangeSequence - 1]);
            players.RightFielder     = FindDefender(9, play.TeamAtBat, lineup[play.LineupChangeSequence - 1]);
            players.Batter           = play.BatterEvent ? "" : FindPlayerByBattingOrder(play.BattingOrder, play.TeamAtBat, lineup[play.LineupChangeSequence - 1]);
            players.RunnerOnFirst    = FindPlayerByBattingOrder(play.EndOfPlay_Runner1BO, play.TeamAtBat, lineup[play.LineupChangeSequence - 1]);
            players.RunnerOnSecond   = FindPlayerByBattingOrder(play.EndOfPlay_Runner2BO, play.TeamAtBat, lineup[play.LineupChangeSequence - 1]);
            players.RunnerOnThird    = FindPlayerByBattingOrder(play.EndOfPlay_Runner3BO, play.TeamAtBat, lineup[play.LineupChangeSequence - 1]);

            return(players);
        }
Ejemplo n.º 3
0
        public async Task Handle(BaseballPlayCreatedEvent message)
        {
            BaseballPlayRM baseballPlay = _mapper.Map <BaseballPlayRM>(message);

            Dictionaries.Dictionaries.cdBaseballPlayRM.GetOrAdd(message.RetrosheetGameId + message.EventNumber.ToString("000"), baseballPlay);

            if (message.Details.EndOfGame)
            {
                baseballGameCompletedLogger.LogTrace(message.RetrosheetGameId);
            }

            await _baseballPlayRepo.SaveAsync(baseballPlay);
        }
Ejemplo n.º 4
0
        public async Task <IActionResult> AddEvent([FromBody] CreateBaseballPlayRequest request)
        {
            BaseballPlayRM previousPlay = null;

            if (request.EventNumber > 1 && !Dictionaries.cdBaseballPlayRM.TryRemove(request.RetrosheetGameId + (request.EventNumber - 1).ToString("000"), out previousPlay))
            {
                return(StatusCode(500, "Previous play data not available on server."));
            }

            BaseballPlayDetails details = new BaseballPlayDetails(previousPlay, request.RetrosheetGameId, request.EventNumber, request.TeamAtBat.ToString(), request.EventText, request.LastPlay);

            request.Details = details;

            CreateBaseballPlayRequestValidator validator = new CreateBaseballPlayRequestValidator();
            var validationResults = validator.Validate(request);

            foreach (var warning in validationResults.Errors.Where(e => e.Severity == FluentValidation.Severity.Warning))
            {
                baseballPlayValidationLogger.LogWarning(request.RetrosheetGameId + " " + request.EventNumber.ToString("000")
                                                        + " " + request.EventText + " : " + warning.ErrorMessage);
            }

            if (!validationResults.Errors.Any(e => e.Severity == FluentValidation.Severity.Error))
            {
                var cmd = _mapper.Map <CreateBaseballPlayCommand>(request);
                await _commandSender.Send(cmd);
            }
            else
            {
                foreach (var validationError in validationResults.Errors.Where(e => e.Severity == FluentValidation.Severity.Error))
                {
                    baseballPlayValidationLogger.LogError(request.RetrosheetGameId + " " + request.EventNumber.ToString("000")
                                                          + " " + request.EventText + " : " + validationError.ErrorMessage);
                }
                return(BadRequest(request.RetrosheetGameId + " " + request.EventNumber.ToString("000") + " " + request.EventText + " has validation errors"));
            }

            return(Ok());
        }
Ejemplo n.º 5
0
        private BaseballPlayRM CopyDetails(BaseballPlayCreatedEvent source)
        {
            BaseballPlayRM play = new BaseballPlayRM();

            play.Inning               = source.Details.Inning;
            play.TeamAtBat            = source.Details.TeamAtBat;
            play.IsBottomHalf         = source.Details.IsBottomHalf;
            play.BattingOrder         = source.Details.BattingOrder;
            play.RetrosheetGameId     = source.RetrosheetGameId;
            play.EventNumber          = source.EventNumber;
            play.LineupChangeSequence = source.LineupChangeSequence;
            play.EventText            = source.EventText;
            play.BasicPlay            = source.Details.BasicPlay;
            play.Modifier             = source.Details.Modifier;
            play.Batter               = source.Batter;
            // CountOnBatter should be ?? if it is not an actual count.  Source data commonly does not conform to this convention, but I don't want this to be a fatal error.
            play.Balls            = Regex.IsMatch(source.CountOnBatter, "^[0-9]{2}$") ? int.Parse(source.CountOnBatter[0].ToString()) : (int?)null;
            play.Strikes          = Regex.IsMatch(source.CountOnBatter, "^[0-9]{2}$") ? int.Parse(source.CountOnBatter[1].ToString()) : (int?)null;
            play.Pitches          = source.Pitches;
            play.Runner1          = source.Details.Runner1;
            play.Runner2          = source.Details.Runner2;
            play.Runner3          = source.Details.Runner3;
            play.RunnerB          = source.Details.RunnerB;
            play.Runner1Out       = source.Details.Runner1Out;
            play.Runner2Out       = source.Details.Runner2Out;
            play.Runner3Out       = source.Details.Runner3Out;
            play.RunnerBOut       = source.Details.RunnerBOut;
            play.OutsOnPlay       = source.Details.OutsOnPlay;
            play.BatterEvent      = source.Details.BatterEvent;
            play.HitValue         = source.Details.HitValue;
            play.R1Destination    = source.Details.R1Destination;
            play.R2Destination    = source.Details.R2Destination;
            play.R3Destination    = source.Details.R3Destination;
            play.RBDestination    = source.Details.RBDestination;
            play.RunsOnPlay       = source.Details.RunsOnPlay;
            play.AtBat            = source.Details.AtBat;
            play.SacHit           = source.Details.SacHit;
            play.SacFly           = source.Details.SacFly;
            play.WildPitch        = source.Details.WildPitch;
            play.PassedBall       = source.Details.PassedBall;
            play.Bunt             = source.Details.Bunt;
            play.Foul             = source.Details.Foul;
            play.StolenBaseR1     = source.Details.StolenBaseR1;
            play.StolenBaseR2     = source.Details.StolenBaseR2;
            play.StolenBaseR3     = source.Details.StolenBaseR3;
            play.CaughtStealingR1 = source.Details.CaughtStealingR1;
            play.CaughtStealingR2 = source.Details.CaughtStealingR2;
            play.CaughtStealingR3 = source.Details.CaughtStealingR3;
            play.PickOffR1        = source.Details.PickOffR1;
            play.PickOffR2        = source.Details.PickOffR2;
            play.PickOffR3        = source.Details.PickOffR3;
            play.PlayOnBatter     = source.Details.PlayOnBatter;
            play.PlayOnR1         = source.Details.PlayOnR1;
            play.PlayOnR2         = source.Details.PlayOnR2;
            play.PlayOnR3         = source.Details.PlayOnR3;
            play.EventType        = source.Details.EventType;
            play.RBIB             = source.Details.RBIB;
            play.RBI1             = source.Details.RBI1;
            play.RBI2             = source.Details.RBI2;
            play.RBI3             = source.Details.RBI3;
            play.RBI = source.Details.RBI;

            play.StartOfHalfInning          = source.Details.StartOfHalfInning;
            play.EndOfHalfInning            = source.Details.EndOfHalfInning;
            play.EndOfGame                  = source.Details.EndOfGame;
            play.VisitorNextBatter          = source.Details.VisitorNextBatter;
            play.HomeNextBatter             = source.Details.HomeNextBatter;
            play.StartOfPlay_Outs           = source.Details.StartOfPlay.Outs;
            play.StartOfPlay_VisitorScore   = source.Details.StartOfPlay.VisitorScore;
            play.StartOfPlay_HomeScore      = source.Details.StartOfPlay.HomeScore;
            play.StartOfPlay_RunnerOnFirst  = source.Details.StartOfPlay.RunnerOnFirst;
            play.StartOfPlay_Runner1BO      = source.Details.StartOfPlay.Runner1BO;
            play.StartOfPlay_RunnerOnSecond = source.Details.StartOfPlay.RunnerOnSecond;
            play.StartOfPlay_Runner2BO      = source.Details.StartOfPlay.Runner2BO;
            play.StartOfPlay_RunnerOnThird  = source.Details.StartOfPlay.RunnerOnThird;
            play.StartOfPlay_Runner3BO      = source.Details.StartOfPlay.Runner3BO;
            play.EndOfPlay_Outs             = source.Details.EndOfPlay.Outs;
            play.EndOfPlay_VisitorScore     = source.Details.EndOfPlay.VisitorScore;
            play.EndOfPlay_HomeScore        = source.Details.EndOfPlay.HomeScore;
            play.EndOfPlay_RunnerOnFirst    = source.Details.EndOfPlay.RunnerOnFirst;
            play.EndOfPlay_Runner1BO        = source.Details.EndOfPlay.Runner1BO;
            play.EndOfPlay_RunnerOnSecond   = source.Details.EndOfPlay.RunnerOnSecond;
            play.EndOfPlay_Runner2BO        = source.Details.EndOfPlay.Runner2BO;
            play.EndOfPlay_RunnerOnThird    = source.Details.EndOfPlay.RunnerOnThird;
            play.EndOfPlay_Runner3BO        = source.Details.EndOfPlay.Runner3BO;

            return(play);
        }
Ejemplo n.º 6
0
 public async Task SaveAsync(BaseballPlayRM item)
 {
     await _repo.SaveAsync(item, (x) => x.RetrosheetGameId + "_" + x.EventNumber.ToString("000"));
 }