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); }