Пример #1
0
        public async Task RecalculateLeagueStandingsAsync(int leagueId)
        {
            var league = await GetAndValidateItem(leagueId);

            var teams = LeagueRepository.GetTeamLeagueAssignments()
                        .Where(tla => tla.LeagueId == leagueId)
                        .Select(tla => tla.TeamId);

            var currentStandings = new List <TeamTableStanding>();

            foreach (var teamId in teams)
            {
                var playedMatches = MatchRepository.GetItems()
                                    .Where(m => m.LeagueId == league.Id &&
                                           (m.Team1Id == teamId || m.Team2Id == teamId) &&
                                           m.Date < DateTime.Now);

                var tableStanding = new TeamTableStanding()
                {
                    LeagueId = leagueId,
                    TeamId   = teamId
                };

                foreach (var match in playedMatches)
                {
                    tableStanding.ApplyMatch(match);
                }

                currentStandings.Add(tableStanding);
            }

            LeagueTableSorter.CalculateTeamPositions(currentStandings);

            var oldStandings = LeagueRepository.GetStandings()
                               .Where(tts => tts.LeagueId == leagueId);

            await LeagueRepository.RemoveTeamStandingsAsync(oldStandings);

            await LeagueRepository.AddTeamStandingsAsync(currentStandings);
        }