Ejemplo n.º 1
0
        public IActionResult UpdateDraftSelection(Guid leagueId, Guid draftId, [FromBody] DraftSelectionUpdateModel draftSelectionUpdateModel)
        {
            if (!_leagueRepository.LeagueExists(leagueId))
            {
                _logger.LogWarning($"No league found for {leagueId}.");
                return(NotFound());
            }

            if (draftSelectionUpdateModel == null)
            {
                return(BadRequest());
            }

            if (!_playerRepository.PlayerExists(draftSelectionUpdateModel.PlayerId))
            {
                _logger.LogWarning($"Player {draftSelectionUpdateModel.PlayerId} not found.");
                return(NotFound());
            }


            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            using (var transaction = _context.Database.BeginTransaction()){
                try{
                    //Update draft selection
                    draftSelectionUpdateModel.DraftId = draftId;
                    var draftSelectionEntity = _mapper.Map <DraftSelection>(draftSelectionUpdateModel);
                    _draftSelectionRepository.UpdateDraftSelectionToDraft(draftId, draftSelectionEntity);

                    if (!_mlbDraftRepository.Save())
                    {
                        throw new Exception($"Updating draft {draftId} failed on save.");
                    }

                    var player   = _playerRepository.GetPlayer(draftSelectionUpdateModel.PlayerId);
                    var roster   = _draftTeamRosterRepository.GetDraftTeamRoster(draftId, draftSelectionUpdateModel.TeamId);
                    var isFilled = _draftTeamRosterRepository.IsDraftTeamRosterPositionFilled(roster.Id, player.Position.Id);

                    if (isFilled)
                    {
                        transaction.Rollback();
                        throw new Exception("Position is Filled");
                    }
                    else
                    {
                        //Update team roster
                        AddPlayerToRosterPositon(player, roster);

                        _draftTeamRosterRepository.UpdateDraftTeamRoster(roster);
                        if (!_mlbDraftRepository.Save())
                        {
                            throw new Exception($"Updating draft {draftId} failed on save.");
                        }
                    }

                    transaction.Commit();

                    return(NoContent());
                }
                catch (Exception) {
                    transaction.Rollback();
                    throw;
                }
            }
        }