예제 #1
0
        public async Task <ActionResult> Create(TeamCreateViewModel model)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    var team = new Team()
                    {
                        Name = model.Name
                    };

                    _context.Team.Add(team);
                    await _context.SaveChangesAsync();

                    TempData["Message"] = "Team " + team.Name + " inserted successfully!";
                    ModelState.Clear();
                }
                catch (Exception ex)
                {
                    TempData["Message"] = "Error: " + ex.Message;
                }
            }

            return(View());
        }
        public async Task <ActionResult> Create(ChampionshipCreateViewModel model)
        {
            //Fill the Team SelectList with the available teams.
            #region Filling TeamSelectList
            var teamList = await _context.Team.ToListAsync();

            foreach (var team in teamList)
            {
                model.TeamSelectList.Add(new SelectListItem()
                {
                    Text  = team.Name,
                    Value = team.Id.ToString()
                });
            }
            #endregion

            if (ModelState.IsValid)
            {
                #region Validations
                var countSelectedTeams = model.TeamIdList.Count;

                //Verify if the number of selected teams is a power of two.
                if (!Tools.IsPowerOfTwo(countSelectedTeams))
                {
                    throw new Exception("The number of selected teams must be a power of 2.");
                }
                #endregion

                try
                {
                    var championship = new Championship()
                    {
                        Name = model.Name, Active = true
                    };
                    var teamChampionshipList = new List <TeamChampionship>();

                    var positionHash = Tools.RandomizePositions(model.TeamIdList.Count);
                    var counter      = 0;

                    //Creates a TeamChampionship for each position in the positionHash (positions = count of teams)
                    foreach (var position in positionHash)
                    {
                        teamChampionshipList.Add(new TeamChampionship()
                        {
                            Championship = championship,
                            Team         = await _context.Team.FindAsync(model.TeamIdList[counter]), //Maybe there's a better way to do this?
                            TreePosition = position,
                            TeamActive   = true
                        });

                        counter++;
                    }

                    using (_context)
                    {
                        _context.TeamChampionship.AddRange(teamChampionshipList);
                        await _context.SaveChangesAsync();
                    }

                    TempData["Message"] = "Championship " + championship.Name + " created successfully!";
                }
                catch (Exception ex)
                {
                    TempData["Message"] = "Error: " + ex.Message;
                }
            }

            return(View(model));
        }