示例#1
0
        public IActionResult CreateDraft(Guid leagueId)
        {
            if (!_leagueRepository.LeagueExists(leagueId))
            {
                _logger.LogWarning($"No league found for {leagueId}.");
                return(NotFound());
            }

            var league = _leagueRepository.GetLeague(leagueId);

            if (league.Teams.Count() < league.MinTeams)
            {
                _logger.LogError("Does not exceed team minimum.");
                return(BadRequest());
            }

            using (var transaction = _context.Database.BeginTransaction()){
                try
                {
                    //Add draft
                    var draftModel = new DraftModel();
                    draftModel.StartDate = DateTime.Now;
                    draftModel.LeagueId  = leagueId;
                    var draftEntity = _mapper.Map <Draft>(draftModel);
                    _draftRepository.AddDraft(draftEntity);

                    if (!_mlbDraftRepository.Save())
                    {
                        throw new Exception("Creating a draft failed on save.");
                    }

                    //Create draft Selections and draft team rosters
                    CreateDraftSelectionsAndRosters(draftEntity);
                    var draftToReturn = _mapper.Map <DraftModel>(draftEntity);
                    transaction.Commit();

                    return(CreatedAtRoute("GetDraft",
                                          new { leagueId = leagueId,
                                                id = draftToReturn.Id },
                                          draftToReturn));
                }
                catch (Exception) {
                    transaction.Rollback();
                    throw;
                }
            }
        }