private bool CheckPassedRunners(BaseballPlayDetails Details)
        {
            // runners can't pass other runners
            if ((Details.RBDestination.HasValue ? (Details.RBDestination > 4 ? 4 : Details.RBDestination) : 0) > (Details.R1Destination.HasValue && Details.R1Destination > 0 ? Details.R1Destination : 6))
            {
                return(false);
            }

            if ((Details.RBDestination.HasValue ? (Details.RBDestination > 4 ? 4 : Details.RBDestination) : 0) > (Details.R2Destination.HasValue && Details.R2Destination > 0 ? Details.R2Destination : 6))
            {
                return(false);
            }

            if ((Details.RBDestination.HasValue ? (Details.RBDestination > 4 ? 4 : Details.RBDestination) : 0) > (Details.R3Destination.HasValue && Details.R3Destination > 0 ? Details.R3Destination : 6))
            {
                return(false);
            }

            if ((Details.R1Destination.HasValue ? (Details.R1Destination > 4 ? 4 : Details.R1Destination) : 0) > (Details.R2Destination.HasValue && Details.R2Destination > 0 ? Details.R2Destination : 6))
            {
                return(false);
            }

            if ((Details.R1Destination.HasValue ? (Details.R1Destination > 4 ? 4 : Details.R1Destination) : 0) > (Details.R3Destination.HasValue && Details.R3Destination > 0 ? Details.R3Destination : 6))
            {
                return(false);
            }

            if ((Details.R2Destination.HasValue ? (Details.R2Destination > 4 ? 4 : Details.R2Destination) : 0) > (Details.R3Destination.HasValue && Details.R3Destination > 0 ? Details.R3Destination : 6))
            {
                return(false);
            }

            return(true);
        }
 public BaseballPlayCreatedEvent(Guid id, string retrosheetGameId, int eventNumber, int lineupChangeSequence, string eventText,
                                 string batter, string countOnBatter, string pitches, BaseballPlayDetails details)
 {
     Id = id;
     RetrosheetGameId     = retrosheetGameId;
     EventNumber          = eventNumber;
     LineupChangeSequence = lineupChangeSequence;
     EventText            = eventText;
     Batter        = batter;
     CountOnBatter = countOnBatter;
     Pitches       = pitches;
     Details       = details;
 }
Ejemplo n.º 3
0
        public BaseballPlay(Guid id, string retrosheetGameId, int eventNumber, int lineupChangeSequence, string eventText,
                            string batter, string countOnBatter, string pitches, BaseballPlayDetails details)
        {
            Id = id;
            _RetrosheetGameId     = retrosheetGameId;
            _EventNumber          = eventNumber;
            _LineupChangeSequence = lineupChangeSequence;
            _EventText            = eventText;
            _Batter        = batter;
            _CountOnBatter = countOnBatter;
            _Pitches       = pitches;
            _Details       = details;

            ApplyChange(new BaseballPlayCreatedEvent(id, retrosheetGameId, eventNumber, lineupChangeSequence, eventText, batter, countOnBatter, pitches, details));
        }
 public CreateBaseballPlayCommand(Guid id, string retrosheetGameId, int eventNumber, int lineupChangeSequence, int inning, int teamAtBat,
                                  string batter, string countOnBatter, string pitches, string eventText, bool lastPlay, BaseballPlayDetails details)
 {
     Id = id;
     RetrosheetGameId     = retrosheetGameId;
     EventNumber          = eventNumber;
     LineupChangeSequence = lineupChangeSequence;
     Inning        = inning;
     TeamAtBat     = teamAtBat;
     Batter        = batter;
     CountOnBatter = countOnBatter;
     Pitches       = pitches;
     EventText     = eventText;
     LastPlay      = lastPlay;
     Details       = details;
 }
        private bool CheckRunnerExists(BaseballPlayDetails Details)
        {
            // runners at end of play must have been runners at start of play
            if (Details.R1Destination.HasValue && !Details.StartOfPlay.RunnerOnFirst)
            {
                return(false);
            }

            if (Details.R2Destination.HasValue && !Details.StartOfPlay.RunnerOnSecond)
            {
                return(false);
            }

            if (Details.R3Destination.HasValue && !Details.StartOfPlay.RunnerOnThird)
            {
                return(false);
            }

            return(true);
        }
        private bool CheckOneRunnerPerBag(BaseballPlayDetails Details)
        {
            // max of 1 runner per bag at end of play, except for runners left on base at end of half inning
            if (!Details.EndOfHalfInning && ((Details.RBDestination == 1 ? 1 : 0) + (Details.R1Destination == 1 ? 1 : 0) + (Details.R2Destination == 1 ? 1 : 0) + (Details.R3Destination == 1 ? 1 : 0) > 1))
            {
                return(false);
            }

            if (!Details.EndOfHalfInning && ((Details.RBDestination == 2 ? 1 : 0) + (Details.R1Destination == 2 ? 1 : 0) + (Details.R2Destination == 2 ? 1 : 0) + (Details.R3Destination == 2 ? 1 : 0) > 1))
            {
                return(false);
            }

            if (!Details.EndOfHalfInning && ((Details.RBDestination == 3 ? 1 : 0) + (Details.R1Destination == 3 ? 1 : 0) + (Details.R2Destination == 3 ? 1 : 0) + (Details.R3Destination == 3 ? 1 : 0) > 1))
            {
                return(false);
            }

            return(true);
        }
Ejemplo n.º 7
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());
        }