示例#1
0
        public TeamViewModel Update(TeamViewModel vmTeam)
        {
            var existingTeam = _teamRepository.Get(vmTeam.Id);

            existingTeam.Name     = vmTeam.Name;
            existingTeam.Address  = vmTeam.Address;
            existingTeam.City     = vmTeam.City;
            existingTeam.Country  = vmTeam.Country;
            existingTeam.ImageUrl = vmTeam.ImageUrl;

            if (vmTeam.ManagerId != null)
            {
                var managerToUpdate = _memberRepository.GetManager(vmTeam.ManagerId.Value);

                if (managerToUpdate.Role == MemberRole.Manager)
                {
                    existingTeam.AddManager(managerToUpdate);
                }
            }
            else
            {
                existingTeam.RemoveManager();
            }

            //unselect unselected players
            foreach (var player in existingTeam.Players().ToList())
            {
                if (!vmTeam.HasSelectedPlayer(player.Id))
                {
                    existingTeam.RemovePlayer(player);
                }
            }

            //select selected players
            foreach (var selectedPlayerId in vmTeam.SelectedPlayerIds)
            {
                if (!existingTeam.HasPlayer(selectedPlayerId))
                {
                    //todo: investigate EF bulk select
                    //in this way, we try to call less times the user repo
                    var playerToBeAdded = _memberRepository.GetPlayerWithNoTeam(selectedPlayerId);

                    if (playerToBeAdded != null)
                    {
                        existingTeam.AddPlayer(playerToBeAdded);
                    }
                }
            }

            _teamRepository.Update(existingTeam);

            return(existingTeam.ToViewModel());
        }