public void Atualizar(CaseDetalhesDTO caseDTO, Usuario usuario)
        {
            if (caseDTO == null || !caseDTO.Id.HasValue)
            {
                throw new Exception("Solicitação inválida.");
            }

            if (!ExisteUsuarioLogado(usuario))
            {
                throw new Exception("É necessário um usuário autenticado para realizar esta ação.");
            }

            CaseDeNegocio caseDeNegocio = ObterPorId(caseDTO.Id.Value);

            if (caseDeNegocio == null)
            {
                throw new Exception("Case de negócio não encontrado.");
            }

            if (caseDeNegocio.Professor != usuario)
            {
                throw new Exception("Somente o professor pode atualizar os dados.");
            }

            caseDTO.PreencherEntidade(caseDeNegocio);

            Atualizar(caseDeNegocio);
        }
        public int Adicionar(CaseDetalhesDTO caseDTO, Usuario usuarioLogado)
        {
            if (caseDTO == null || caseDTO.Id > 0)
            {
                throw new Exception("Solicitação inválida.");
            }

            if (!ExisteUsuarioLogado(usuarioLogado))
            {
                throw new Exception("É necessário um usuário autenticado para realizar esta ação.");
            }

            CaseDeNegocio caseDeNegocio = new CaseDeNegocio();

            caseDeNegocio.IdProfessor = usuarioLogado.Id;
            caseDeNegocio.Professor   = usuarioLogado;

            caseDTO.PreencherEntidade(caseDeNegocio);

            caseDeNegocio.GerarChaveDeBusca();

            Adicionar(caseDeNegocio);

            return(caseDeNegocio.Id);
        }
        private void PreencherPermissoesDoUsuario(CaseDetalhesDTO response, Usuario usuario, CaseDeNegocio caseDeNegocio)
        {
            response.PermiteEditar         = false;
            response.Inscrito              = false;
            response.PermiteSeInscrever    = false;
            response.PermiteCriarNovoGrupo = false;
            response.PermiteCriarLicoes    = false;
            response.PermiteCriarTrofeus   = false;

            if (ExisteUsuarioLogado(usuario) && ExisteCaseDeNegocio(caseDeNegocio))
            {
                if (UsuarioEstaAssociadoAoCaseDeNegocioComoProfessor(usuario, caseDeNegocio))
                {
                    response.PermiteEditar       = true;
                    response.PermiteCriarLicoes  = true;
                    response.PermiteCriarTrofeus = true;
                }
                else if (UsuarioEstaInscritoNoCaseDeNegocio(usuario, caseDeNegocio))
                {
                    response.Inscrito = true;
                    if (caseDeNegocio.PermiteMontarGrupos)
                    {
                        bool jaPossuiGrupo = _consultaDeAlunosService.UsuarioFazParteDeAlgumGrupoDoCaseDeNegocio(usuario.Id, caseDeNegocio.Id);
                        response.PermiteCriarNovoGrupo = !jaPossuiGrupo;
                    }
                }
                else
                {
                    response.PermiteSeInscrever = true;
                }
            }
        }
 public ActionResult Put([FromBody] CaseDetalhesDTO caseDTO)
 {
     try
     {
         _caseDeNegocioService.Atualizar(caseDTO, _usuarioLogado.Obter());
         return(NoContent());
     }
     catch (Exception e)
     {
         return(BadRequest(e.Message));
     }
 }
 public ActionResult Post([FromBody] CaseDetalhesDTO caseDTO)
 {
     try
     {
         int idCase = _caseDeNegocioService.Adicionar(caseDTO, _usuarioLogado.Obter());
         return(Ok(idCase));
     }
     catch (Exception e)
     {
         return(BadRequest(e.Message));
     }
 }
        public CaseDetalhesDTO ObterDetalhesPorId(int idCaseDeNegocio, Usuario usuario)
        {
            var caseDeNegocio = ObterPorId(idCaseDeNegocio);

            if (caseDeNegocio == null)
            {
                throw new Exception("Case de negócio não encontrado.");
            }

            var response = new CaseDetalhesDTO(caseDeNegocio);

            PreencherPermissoesDoUsuario(response, usuario, caseDeNegocio);

            return(response);
        }