Exemple #1
0
        public async Task <IEnumerable <MergedPlayersStatisticsDto> > GetListPlayersStatistics(int Matchid)   // pobiera statysyki zawodnikow w konkretnym meczu
        {
            var match = await _matchRepository.GetAsyncMatch(Matchid);

            if (match == null)
            {
                throw new Exception($"Match with this id {Matchid} does not exist");
            }



            var playersListInMatch = await _matchRepository.GetAsyncPlayersInMatch(Matchid);   //pobieram mecz a w nim liste z jakimi playerami sie łączy

            var playerList = new List <MatchhPlayer>();

            for (int i = 0; i < playersListInMatch.Players2Match.Count; i++)
            {
                var player = new MatchhPlayer(Convert.ToInt16(playersListInMatch.Players2Match[i].Goals), Convert.ToInt16(playersListInMatch.Players2Match[i].Assists), Convert.ToInt16(playersListInMatch.Players2Match[i].YellowCard), Convert.ToInt16(playersListInMatch.Players2Match[i].RedCard), Convert.ToBoolean(playersListInMatch.Players2Match[i].PlayInMatch)); //wyszukuje go
                player.PlayerId = Convert.ToInt16(playersListInMatch.Players2Match[i].PlayerId);                                                                                                                                                                                                                                                                            //wybieram zawodnika dopisanego do meczu
                playerList.Add(player);                                                                                                                                                                                                                                                                                                                                     //i dodaje go do listy
            }



            List <MergedPlayersStatisticsDto> AllInfoListPlrs = new List <MergedPlayersStatisticsDto>();
            List <MatchhPlayer> playersSList = playerList.ToList();    // konwertuje ienumerable do listy zeby moc wykonac swoje dzialania

            for (int i = 0; i < playersSList.Count; i++)
            {
                MergedPlayersStatisticsDto playerStatsInMatchFull = new MergedPlayersStatisticsDto();
                var    plr    = _playerRepository.GetAsyncPlayer(Convert.ToInt16(playersSList[i].PlayerId));
                Player plaObj = plr.Result;
                playerStatsInMatchFull.PlayerId    = Convert.ToInt16(playersSList[i].PlayerId);
                playerStatsInMatchFull.Name        = plaObj.Name;
                playerStatsInMatchFull.Surname     = plaObj.Surname;
                playerStatsInMatchFull.Position    = plaObj.Position;
                playerStatsInMatchFull.Goals       = Convert.ToInt32(playersSList[i].Goals);
                playerStatsInMatchFull.Assists     = Convert.ToInt32(playersSList[i].Assists);
                playerStatsInMatchFull.YellowCard  = Convert.ToInt32(playersSList[i].YellowCard);
                playerStatsInMatchFull.RedCard     = Convert.ToInt32(playersSList[i].RedCard);
                playerStatsInMatchFull.PlayInMatch = playersSList[i].PlayInMatch;
                AllInfoListPlrs.Add(playerStatsInMatchFull);
            }

            //return _mapper.Map<IEnumerable<GetPlayersStatisticInMatchDto>>(playersS);
            AllInfoListPlrs = SortPlayers(AllInfoListPlrs);
            return(AllInfoListPlrs);
        }
        public async Task <IEnumerable <MergedPlayersStatisticsDto> > GetPlayersListStats(int userId)   //metoda pobierajaca liste zawodnikow z ich statystykami
        {
            //pobiera liste statystyk zawodnikow w meczach (to zawodnik z polaczeniem tabeli ZawodnikMecz)
            var playersStatisticListInMatches = await _playerRepository.GetAsyncPlayersListStats(userId);

            //na nowo sa liczone statystyki kazdego zawodnika
            foreach (var plr in playersStatisticListInMatches)   //leci po zawodnikach
            {
                // zerujemy ilosc w kazdej liczonej zmiennej statystyk
                int Matches    = 0;
                int Goals      = 0;
                int Assists    = 0;
                int YellowCard = 0;
                int RedCard    = 0;

                //pobiera statystyke zawodnika z kazdego meczu w ktorym znalazl sie w kadrze i dodaje do juz pobranych
                foreach (var match in plr.Matchhs2Player)
                {
                    if (match.Goals != null)
                    {
                        Goals = Convert.ToInt16(Goals + match.Goals);
                    }
                    if (match.Assists != null)
                    {
                        Assists = Convert.ToInt16(Assists + match.Assists);
                    }
                    if (match.YellowCard != null)
                    {
                        YellowCard = Convert.ToInt16(YellowCard + match.YellowCard);
                    }
                    if (match.RedCard != null)
                    {
                        RedCard = Convert.ToInt16(RedCard + match.RedCard);
                    }
                    if (match.PlayInMatch == true)
                    {
                        Matches++;
                    }
                }

                //pobiera statystyke zawodnika
                PlayersStatictics playerToUpdate = await _playerRepository.GetAsyncPlayerStatistic(plr.Id);

                //edytuje wartosci ktore powyzej zostaly na nowo wyliczone
                playerToUpdate.SetMatches(Matches);
                playerToUpdate.SetGoals(Goals);
                playerToUpdate.SetAssists(Assists);
                playerToUpdate.SetYellowCards(YellowCard);
                playerToUpdate.SetRedCard(RedCard);

                //wywołuje metode edytujaca w bazie statystyke zawodnika
                await _playerRepository.UpdateAsyncPlayerStatistic(playerToUpdate);
            }


            //pobiera juz edytowana, nowa liste statystyk(ta ogolna)
            var playerStatsIEnumerable = await _playerRepository.GetAsyncPlayersStatistics(userId);

            //zamienia IEnumerable uzyskany z powyższej metody na liste
            List <PlayersStatictics> playersStatisticsList = playerStatsIEnumerable.ToList();

            //pobiera podstawową listę zawodnikow
            var players = await _playerRepository.GetAsyncAllPlayers(userId);

            List <Player> playersList = players.ToList();

            //sortuje listę po pozycjach
            playersList = SortPlayers(playersList);


            //deklaracja listy obiektow scalonych z tabeli Player i Statistics
            var mergedPlayersStatisticsList = new List <MergedPlayersStatisticsDto>();

            //uzupenianie scalonej listy
            for (int i = 0; i < playersList.Count(); i++)
            {
                //pobiera id zawodnika
                int playerId = playersList[i].Id;

                //pobiera jego statystyki po jego id
                PlayersStatictics statistic = playersStatisticsList.FirstOrDefault(x => x.PlayerId == playerId);

                //tworzy nowy obiekt w oparciu o zawodnika i statystyki
                var mergedPlayer = new MergedPlayersStatisticsDto(playerId, playersList[i].Name, playersList[i].Surname, playersList[i].Position,
                                                                  Convert.ToInt32(statistic.Goals), Convert.ToInt32(statistic.Assists), Convert.ToInt32(statistic.YellowCard),
                                                                  Convert.ToInt32(statistic.RedCard), Convert.ToInt32(statistic.Matches));

                //dodaje nowy obiekt do listy scalonych
                mergedPlayersStatisticsList.Add(mergedPlayer);
            }

            //zwraca cala gotowa liste
            return(mergedPlayersStatisticsList);
        }