Exemplo n.º 1
0
        public async Task ReprocessSeasonStatsAsync(short year, byte season)
        {
            var stats = (await GetSeasonTeamsStatsAsync(year, season)).ToDictionary(stat => stat.Id, stat => stat);

            foreach (var teamStats in stats)
            {
                teamStats.Value.Reset();
            }


            var seasonConfig = await _configService.GetConfig(year, season);

            for (byte round = 1; round <= seasonConfig.RoundsCount; round++)
            {
                var matches = await _matchesService.GetSeasonRoundMatchesAsync(year, season, round);

                foreach (var match in matches)
                {
                    var newMatchWinner = match.HomeScore > match.AwayScore ? WhoWon.Home :
                                         match.AwayScore > match.HomeScore ? WhoWon.Away : WhoWon.Draw;
                    var homeStats = stats[match.HomeTeamId];
                    var awayStats = stats[match.AwayTeamId];
                    homeStats.G++;
                    awayStats.G++;
                    homeStats.GF += match.HomeScore.GetValueOrDefault();
                    homeStats.GA += match.AwayScore.GetValueOrDefault();
                    awayStats.GF += match.AwayScore.GetValueOrDefault();
                    awayStats.GA += match.HomeScore.GetValueOrDefault();

                    switch (newMatchWinner)
                    {
                    case WhoWon.Home:
                        homeStats.W++;
                        awayStats.L++;
                        break;

                    case WhoWon.Away:
                        homeStats.L++;
                        awayStats.W++;
                        break;

                    case WhoWon.Draw:
                        homeStats.D++;
                        awayStats.D++;
                        break;
                    }
                }
            }

            await BulkUpsertTeamStats(year, season, stats.Values);
        }
Exemplo n.º 2
0
        public async Task <IEnumerable <TeamSeasonStats> > GetYearTeamsStatsAsync(short year)
        {
            var championship = await _seasonsService.GetConfig(year);

            var teamsStats = new List <TeamSeasonStats>();

            foreach (var season in championship.Seasons)
            {
                var seasonStats = await _statsRepository.GetSeasonTeamsStatsAsync(year, season.SeasonId);

                teamsStats.AddRange(_mapper.Map <IEnumerable <TeamSeasonStats> >(seasonStats));
            }

            var stats = teamsStats.GroupBy(ts => ts.Id).Select(ts => ts.Aggregate((x, y) => x + y));;

            return(stats.OrderByDescending(s => s.Pts).ThenByDescending(s => s.GD).ThenByDescending(s => s.GF));
        }
Exemplo n.º 3
0
        public async Task ResetAllMatchesFromSeasonAsync(short year, byte season)
        {
            var config = await _seasonService.GetConfig(year, season);

            if (config == null)
            {
                throw new ArgumentException($"Missing config for {year}#{season}.");
            }

            for (byte round = 1; round <= config.RoundsCount; round++)
            {
                var matches = await _matchRepository.GetMatchesAsync(year, season, round);

                foreach (var match in matches)
                {
                    match.WasPlayed = false;
                    match.HomeScore = null;
                    match.AwayScore = null;
                }

                await _matchRepository.BatchUpsertAsync(matches);
            }
        }