public async Task <int> CreateAsyncPlayer(PostPlayer playerData, int userId)
        {
            //pobieramy uzytkownika z bazy aby utworzyc pelny obiekt player do dodania do bazy
            var user = await _authRepository.UserAccount(userId);

            // tworzy objekt Player
            var player = new Player();

            player.user = user;
            player.SetSurname(playerData.Surname);
            player.SetName(playerData.Name);
            player.SetAge(playerData.Age);
            player.SetPosition(playerData.Position);
            var PlayersStatictics = new PlayersStatictics(0, 0, 0, 0, 0, player);

            player.Statictics = PlayersStatictics;

            // przekazuje id użytkownika, który chce stworzyć zawodnika i samego zawodnika do metody z repozytorium
            // a wywołanie jest przypisane do zmiennej ponieważ metoda z repozytorium zwraca id nowo utworzonego zawodnika
            int createdPlayerId = await _playerRepository.AddAsyncPlayer(player, userId);

            return(createdPlayerId);
        }
 public async Task UpdateAsyncPlayerStatistic(PlayersStatictics playerS) //metoda edytuje statystyki ogolne w tabeli PlrStats
 {
     _context.PlrStats.Update(playerS);
     _context.SaveChanges();
     await Task.CompletedTask;
 }
        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);
        }