public async Task <Game> UpdateSpread(int GameId, SpreadUpdate spreadUpdates) { if (spreadUpdates == null) { throw new ArgumentException("No spreadUpdates parameter input for UpdateSpread (is null)"); } using (var dbSession = _documentStore.LightweightSession()) { var game = await dbSession .Query <GameData>() .Where(g => g.GameId == GameId) .SingleOrDefaultAsync() .ConfigureAwait(false); if (game == null) { throw new ArgumentException($"No matching game found to update for Game Id: {GameId}"); } GameChanger gameChanger = new GameChanger(game, dbSession); gameChanger.ApplySpread(spreadUpdates); dbSession.Store(game); dbSession.SaveChanges(); var pickemEvent = new PickemSystemEvent(PickemSystemEventTypes.SpreadUpdated, GameId); _pickemEventer.Emit(pickemEvent); } // read back out to return return(await this.ReadGame(GameId)); }
public async void Emit(PickemSystemEvent pickemSystemEvent) { var pickemEventJson = JsonConvert.SerializeObject(pickemSystemEvent); _logger.LogDebug(pickemEventJson); await _webSocketPoolManager.SendToAllSockets(pickemEventJson); }
internal async Task <Game> LockSpread(int gameId) { using (var dbSession = _documentStore.LightweightSession()) { var game = await dbSession .Query <GameData>() .Where(g => g.GameId == gameId) .SingleOrDefaultAsync() .ConfigureAwait(false); if (game == null) { throw new ArgumentException($"No matching game found to update for Game Id: {gameId}"); } GameChanger gameChanger = new GameChanger(game, dbSession); gameChanger.LockSpread(); dbSession.Store(game); dbSession.SaveChanges(); var pickemEvent = new PickemSystemEvent(PickemSystemEventTypes.SpreadLocked, gameId); _pickemEventer.Emit(pickemEvent); } // read back out to return return(await this.ReadGame(gameId)); }
internal async Task <Team> SetTeamStats(string uncheckedTeamCode, string seasonCode, int weekNumber, TeamStatsUpdate teamStatsUpdate) { if (teamStatsUpdate == null) { throw new ArgumentNullException("teamStatsUpdate"); } using (var dbSession = _documentStore.LightweightSession()) { var teamData = await this.GetTeam(dbSession, uncheckedTeamCode); // does season exist, if not add if (teamData.Seasons == null) { teamData.Seasons = new List <TeamSeasonStats>(); } TeamSeasonStats teamSeasonStats = teamData.Seasons.SingleOrDefault(s => s.SeasonCodeRef == seasonCode); if (teamSeasonStats == null) { teamSeasonStats = new TeamSeasonStats(); teamSeasonStats.SeasonCodeRef = seasonCode; teamData.Seasons.Add(teamSeasonStats); } if (teamSeasonStats.WeekStats == null) { teamSeasonStats.WeekStats = new List <TeamWeekStats>(); } TeamWeekStats teamWeekStats = teamSeasonStats.WeekStats.SingleOrDefault(w => w.WeekNumberRef == weekNumber); if (teamWeekStats == null) { teamWeekStats = new TeamWeekStats(); teamWeekStats.WeekNumberRef = weekNumber; teamSeasonStats.WeekStats.Add(teamWeekStats); } teamWeekStats.FbsRank = teamStatsUpdate.FbsRank; teamWeekStats.Losses = teamStatsUpdate.Losses; teamWeekStats.Wins = teamStatsUpdate.Wins; dbSession.Store(teamData); dbSession.SaveChanges(); var pickemEvent = new PickemSystemEvent(PickemSystemEventTypes.TeamStatsChanged, seasonCode, weekNumber); pickemEvent.DynamicKeys.teamCode = teamData.TeamCode; _pickemEventer.Emit(pickemEvent); return(MapTeamData(teamData)); } }
public async Task <Game> UpdateGame(int GameId, GameUpdate gameUpdates) { if (gameUpdates == null) { throw new ArgumentException("No gameUpdates parameter input for UpdateGame (is null)"); } using (var dbSession = _documentStore.LightweightSession()) { var game = await dbSession .Query <GameData>() .Where(g => g.GameId == GameId) .SingleOrDefaultAsync() .ConfigureAwait(false); if (game == null) { throw new ArgumentException($"No matching game found for Game Id: {GameId}"); } GameChanger gameChanger = new GameChanger(game, dbSession); var gameChanges = gameChanger.ApplyChanges(gameUpdates); dbSession.Store(game); var leagueCodesAffected = new List <string>(); if (gameChanges.GameStateChanged || gameChanges.ScoreChanged) { // score and/or game state changed, let all the leagues know. // TODO - avoid direct new up of league service. Cannot IoC due to circlies because game service uses league. What to do? var leagueService = _serviceProvider.GetService <LeagueService>(); var leaguesData = leagueService.ApplyGameChanges(game, gameChanges, dbSession); foreach (var leagueData in leaguesData) { dbSession.Store(leagueData); leagueCodesAffected.Add(leagueData.LeagueCode); } } dbSession.SaveChanges(); if (gameChanges.GameChanged) { var pickemEvent = new PickemSystemEvent(PickemSystemEventTypes.GameChanged, GameId); pickemEvent.DynamicInformation.ancillaryMetaDataChanged = gameChanges.AncillaryMetaDataChanged; pickemEvent.DynamicInformation.gameStateChanged = gameChanges.GameStateChanged; pickemEvent.DynamicInformation.scoreChanged = gameChanges.ScoreChanged; foreach (var leagueCode in leagueCodesAffected) { pickemEvent.LeagueCodesAffected.Add(leagueCode); } _pickemEventer.Emit(pickemEvent); } } // read back out to return return(await this.ReadGame(GameId)); }