public void AtribuirPontosParaResposta(AtribuirNotaRequest request, Usuario usuarioLogado)
        {
            Resposta resposta = _respostaRepository.GetById(request.IdResposta);

            if (resposta == null)
            {
                throw new Exception("Resposta não encontrada.");
            }

            int idCase = (from r in _respostaRepository.Queryable()
                          join e in _entregaDeLicaoRepository.Queryable() on r.IdEntregaDeLicao equals e.Id
                          join l in _licaoRepository.Queryable() on e.IdLicao equals l.Id
                          where r.Id == request.IdResposta
                          select l.IdCase).FirstOrDefault();

            CaseDeNegocio caseDeNegocio = _caseDeNegocioService.ObterPorId(idCase);

            if (!_caseDeNegocioService.UsuarioEstaAssociadoAoCaseDeNegocioComoProfessor(usuarioLogado, caseDeNegocio))
            {
                throw new Exception("Usuário não possui permissão para atribuir notas.");
            }

            resposta.PontosGanhos = request.Pontos;

            _respostaRepository.Update(resposta);
        }
예제 #2
0
        public int Adicionar(TrofeuDTO trofeuDTO, Usuario usuarioLogado)
        {
            if (trofeuDTO == null || trofeuDTO.Id > 0)
            {
                throw new Exception("Solicitação inválida.");
            }

            CaseDeNegocio caseDeNegocio = _caseDeNegocioService.ObterPorId(trofeuDTO.IdCase);

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

            if (!_caseDeNegocioService.UsuarioEstaAssociadoAoCaseDeNegocioComoProfessor(usuarioLogado, caseDeNegocio))
            {
                throw new Exception("Usuário não possui permissão.");
            }

            Trofeu trofeu = new Trofeu();

            trofeu.IdCase        = caseDeNegocio.Id;
            trofeu.CaseDeNegocio = caseDeNegocio;

            trofeuDTO.PreencherEntidade(trofeu);

            Adicionar(trofeu);

            return(trofeu.Id);
        }
예제 #3
0
        public int Adicionar(LicaoDTO licaoDTO, Usuario usuarioLogado)
        {
            if (licaoDTO == null || licaoDTO.Id.HasValue)
            {
                throw new Exception("Solicitação inválida.");
            }

            if (licaoDTO.Questoes == null || !licaoDTO.Questoes.Any())
            {
                throw new Exception("É necessário ter pelo menos 1 questão.");
            }

            CaseDeNegocio caseDeNegocio = _caseDeNegocioService.ObterPorId(licaoDTO.IdCase);

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

            if (!_caseDeNegocioService.PermiteUsuarioEditarCaseDeNegocio(usuarioLogado, caseDeNegocio))
            {
                throw new Exception("Usuário não possui permissão para esta solicitação.");
            }

            Licao licao = new Licao();

            licao.IdCase        = caseDeNegocio.Id;
            licao.CaseDeNegocio = caseDeNegocio;

            licaoDTO.PreencherEntidade(licao);
            AtualizarListaDeQuestoes(licao, licaoDTO.Questoes);

            Adicionar(licao);

            return(licao.Id);
        }
예제 #4
0
        public void Atribuir(AtribuirTrofeuRequest request, Usuario usuario)
        {
            Trofeu trofeu = _trofeuRepository.GetById(request.IdTrofeu);

            if (trofeu == null)
            {
                throw new Exception("Troféu não localizado.");
            }

            CaseDeNegocio caseDeNegocio = _caseDeNegocioService.ObterPorId(trofeu.IdCase);

            if (!_caseDeNegocioService.UsuarioEstaAssociadoAoCaseDeNegocioComoProfessor(usuario, caseDeNegocio))
            {
                throw new Exception("Usuário não possui permissão para esta solicitação.");
            }

            EntregaDeLicao entregaDeLicao = _entregaDeLicaoRepository.GetById(request.IdEntregaDeLicao);

            if (entregaDeLicao == null)
            {
                throw new Exception("Lição não localizada.");
            }
            else if (entregaDeLicao.Licao.IdCase != caseDeNegocio.Id)
            {
                throw new Exception("Lição não pode ser associada à este troféu.");
            }

            Resposta resposta = null;

            if (request.IdResposta != null && request.IdResposta > 0)
            {
                resposta = _respostaRepository.GetById(request.IdResposta.Value);
                if (resposta == null)
                {
                    throw new Exception("Questão não localizada.");
                }
                else if (resposta.IdEntregaDeLicao != entregaDeLicao.Id)
                {
                    throw new Exception("Resposta não associada à lição.");
                }
            }

            EntregaDeTrofeu entregaDeTrofeu = new EntregaDeTrofeu(trofeu, entregaDeLicao, resposta);

            Adicionar(entregaDeTrofeu);
        }