public BaseballGameStateResult AddStat([FromBody] StatRequest statRequest) { var dataCache = new DataCache(); var gameStat = ConvertObjects.ConvertType(statRequest); AtBatStates gameStates = null; if (statRequest.IsBaseball) { gameStates = BaseballService.GetInstance().GetGameStates(gameStat, statRequest.IsLatestGroup, dataCache); } NextBatterResult nextBatter = null; bool dataSaved = false; if (gameStates == null || (!gameStates.NewState.PotentialAdjustment && !gameStates.NewState.InningChanged)) { dataSaved = true; GamesService.GetInstance().AddStat(gameStat, gameStates?.OriginalState); if (statRequest.IsBaseball && gameStates.NewState.ChangeState) { nextBatter = ConvertObjects.ConvertType(BaseballService.GetInstance().SaveNewGameState(gameStates.NewState, false, dataCache: dataCache)); //Create new at bat group for player StatsService.GetInstance().CreateNewStatGroup((int)SportsList.Baseball, gameStat.GameID, gameStat.PlayerID, gameStat.TeamID); } } if (statRequest.IsBaseball) { var gameStateResult = ConvertObjects.ConvertType(gameStates.NewState); gameStateResult.GameStat = statRequest; gameStateResult.NextBatter = nextBatter; gameStateResult.DataSaved = dataSaved; gameStateResult.IsStatsPage = true; return(gameStateResult); } else { return(new BaseballGameStateResult() { DataSaved = true }); } }
public AtBatStates GetGameStates(PlayerGameStat stat, bool isLatestGroup, DataCache dataCache = null) { AtBatStates states = new AtBatStates(); var players = PlayersService.GetInstance().GetPlayers(stat.TeamID, gameID: stat.GameID, dataCache: dataCache); var player = players.First(p => p.ID == stat.PlayerID); states.OriginalState = GetExistingGameState(gameID: stat.GameID, leagueID: stat.LeagueID, dataCache: dataCache); states.OriginalState.GameID = stat.GameID; if (states.OriginalState.Inning == 0) { states.OriginalState.Inning = 1; states.OriginalState.TopOfInning = true; } BaseballGameState newState = new BaseballGameState() { GameID = states.OriginalState.GameID, NumberOfOuts = states.OriginalState.NumberOfOuts, Inning = states.OriginalState.Inning, TopOfInning = states.OriginalState.TopOfInning, RunnersScored = new List <PlayerBase>(), RunnersOut = new List <PlayerBase>(), Team1Player = states.OriginalState.TopOfInning ? new PlayerBase() { ID = stat.PlayerID } : states.OriginalState.Team1Player, Team2Player = !states.OriginalState.TopOfInning ? new PlayerBase() { ID = stat.PlayerID } : states.OriginalState.Team2Player, }; bool changeState = true; bool nextAtBat = false; bool potentialAdjustment = false; if (stat.Value == -1 || !isLatestGroup) { newState.PlayerOnFirst = states.OriginalState.PlayerOnFirst; newState.PlayerOnSecond = states.OriginalState.PlayerOnSecond; newState.PlayerOnThird = states.OriginalState.PlayerOnThird; changeState = false; potentialAdjustment = false; } else { if (isLatestGroup) { if (stat.StatTypeID == (int)CalculatedStatTypes.Single || stat.StatTypeID == (int)CalculatedStatTypes.FC) { newState.PlayerOnFirst = player; if (states.OriginalState.PlayerOnThird != null) { potentialAdjustment = true; newState.RunnersScored.Add(states.OriginalState.PlayerOnThird); } if (states.OriginalState.PlayerOnSecond != null) { potentialAdjustment = true; newState.PlayerOnThird = states.OriginalState.PlayerOnSecond; } if (states.OriginalState.PlayerOnFirst != null) { potentialAdjustment = true; newState.PlayerOnSecond = states.OriginalState.PlayerOnFirst; } nextAtBat = true; } else if (stat.StatTypeID == (int)CalculatedStatTypes.Double) { newState.PlayerOnSecond = player; if (states.OriginalState.PlayerOnThird != null) { potentialAdjustment = true; newState.RunnersScored.Add(states.OriginalState.PlayerOnThird); } if (states.OriginalState.PlayerOnSecond != null) { potentialAdjustment = true; newState.RunnersScored.Add(states.OriginalState.PlayerOnSecond); } if (states.OriginalState.PlayerOnFirst != null) { potentialAdjustment = true; newState.PlayerOnThird = states.OriginalState.PlayerOnFirst; } nextAtBat = true; } else if (stat.StatTypeID == (int)CalculatedStatTypes.Triple) { newState.PlayerOnThird = player; if (states.OriginalState.PlayerOnFirst != null) { potentialAdjustment = true; newState.RunnersScored.Add(states.OriginalState.PlayerOnFirst); } if (states.OriginalState.PlayerOnSecond != null) { potentialAdjustment = true; newState.RunnersScored.Add(states.OriginalState.PlayerOnSecond); } if (states.OriginalState.PlayerOnThird != null) { potentialAdjustment = true; newState.RunnersScored.Add(states.OriginalState.PlayerOnThird); } nextAtBat = true; } else if (stat.StatTypeID == (int)CalculatedStatTypes.HomeRun) { newState.RunnersScored.Add(player); potentialAdjustment = true; if (states.OriginalState.PlayerOnFirst != null) { newState.RunnersScored.Add(states.OriginalState.PlayerOnFirst); } if (states.OriginalState.PlayerOnSecond != null) { newState.RunnersScored.Add(states.OriginalState.PlayerOnSecond); } if (states.OriginalState.PlayerOnThird != null) { newState.RunnersScored.Add(states.OriginalState.PlayerOnThird); } nextAtBat = true; } else if (stat.StatTypeID == (int)CalculatedStatTypes.GroundOut) { newState.NumberOfOuts++; if (states.OriginalState.PlayerOnFirst != null) { potentialAdjustment = true; newState.PlayerOnSecond = states.OriginalState.PlayerOnFirst; } if (states.OriginalState.PlayerOnSecond != null) { potentialAdjustment = true; newState.PlayerOnThird = states.OriginalState.PlayerOnSecond; } if (states.OriginalState.PlayerOnThird != null && newState.NumberOfOuts < 3) { potentialAdjustment = true; newState.RunnersScored.Add(states.OriginalState.PlayerOnThird); } nextAtBat = true; } else if (stat.StatTypeID == (int)CalculatedStatTypes.FlyOut || stat.StatTypeID == (int)CalculatedStatTypes.SF) { potentialAdjustment = true; newState.PlayerOnFirst = states.OriginalState.PlayerOnFirst; newState.PlayerOnSecond = states.OriginalState.PlayerOnSecond; newState.PlayerOnThird = states.OriginalState.PlayerOnThird; newState.NumberOfOuts++; nextAtBat = true; } else if (stat.StatTypeID == (int)CalculatedStatTypes.Strikeout) { newState.PlayerOnFirst = states.OriginalState.PlayerOnFirst; newState.PlayerOnSecond = states.OriginalState.PlayerOnSecond; newState.PlayerOnThird = states.OriginalState.PlayerOnThird; newState.NumberOfOuts++; nextAtBat = true; } else { newState.PlayerOnFirst = states.OriginalState.PlayerOnFirst; newState.PlayerOnSecond = states.OriginalState.PlayerOnSecond; newState.PlayerOnThird = states.OriginalState.PlayerOnThird; changeState = false; } } } bool inningChange = false; if (newState.NumberOfOuts == 3) { inningChange = true; } //Modifying old at-bat, done mess with the state if (!isLatestGroup) { inningChange = false; nextAtBat = false; potentialAdjustment = false; changeState = false; } newState.InningChanged = inningChange; newState.PotentialAdjustment = potentialAdjustment; newState.NextAtBat = nextAtBat; newState.ChangeState = changeState; states.NewState = newState; return(states); }