/// <summary> /// Processes a <see cref="Game"/> entity into the Teams data store asynchronously. /// </summary> /// <param name="game"></param> /// <returns></returns> public virtual async Task ProcessGameAsync(IGameDecorator gameDecorator) { Guard.ThrowIfNull(gameDecorator, $"{GetType()}.{nameof(ProcessGameAsync)}: {nameof(gameDecorator)}"); var seasonYear = gameDecorator.SeasonYear; var guestSeason = await _teamSeasonRepository.GetTeamSeasonByTeamAndSeasonAsync(gameDecorator.GuestName, seasonYear); TeamSeasonDecorator?guestSeasonDecorator = null; if (!(guestSeason is null)) { guestSeasonDecorator = new TeamSeasonDecorator(guestSeason); } var hostSeason = await _teamSeasonRepository.GetTeamSeasonByTeamAndSeasonAsync(gameDecorator.HostName, seasonYear); TeamSeasonDecorator?hostSeasonDecorator = null; if (!(hostSeason is null)) { hostSeasonDecorator = new TeamSeasonDecorator(hostSeason); } await EditWinLossDataAsync(guestSeasonDecorator, hostSeasonDecorator, gameDecorator); EditScoringData(guestSeasonDecorator, hostSeasonDecorator, gameDecorator.GuestScore, gameDecorator.HostScore); }
private async Task UpdateRankingsForTeamSeason(TeamSeasonDecorator teamSeasonDecorator) { try { var teamSeasonScheduleTotals = await _teamSeasonScheduleRepository.GetTeamSeasonScheduleTotalsAsync( teamSeasonDecorator.TeamName, teamSeasonDecorator.SeasonYear); if (teamSeasonScheduleTotals.ScheduleGames is null) { return; } var teamSeasonScheduleAverages = await _teamSeasonScheduleRepository.GetTeamSeasonScheduleAveragesAsync( teamSeasonDecorator.TeamName, teamSeasonDecorator.SeasonYear); if (teamSeasonScheduleAverages.PointsFor is null || teamSeasonScheduleAverages.PointsAgainst is null) { return; } var leagueSeason = await _leagueSeasonRepository.GetLeagueSeasonByLeagueAndSeasonAsync( teamSeasonDecorator.LeagueName, teamSeasonDecorator.SeasonYear); if (leagueSeason?.AveragePoints is null) { return; } lock (_dbLock) { teamSeasonDecorator.UpdateRankings(teamSeasonScheduleAverages.PointsFor.Value, teamSeasonScheduleAverages.PointsAgainst.Value, leagueSeason.AveragePoints.Value); } } catch (InvalidOperationException ex) { if (ex.Message == "Nullable object must have a value.") { // Ignore exception. } else { //_sharedService.ShowExceptionMessage(ex, $"InvalidOperationException: {teamSeason.TeamName}"); } } catch (Exception) { //_sharedService.ShowExceptionMessage(ex.InnerException, $"Exception: {teamSeason.TeamName}"); } }
private async Task UpdateRankings() { var teamSeasons = await _teamSeasonRepository.GetTeamSeasonsBySeasonAsync(_selectedSeason); foreach (var teamSeason in teamSeasons) { var teamSeasonDecorator = new TeamSeasonDecorator(teamSeason); await UpdateRankingsForTeamSeason(teamSeasonDecorator); } await _sharedRepository.SaveChangesAsync(); }