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