public IHttpActionResult SalvarTarefa(Interface.TarefaTurma tarefaTurma)
        {
            var turma  = _turmas.Por(tarefaTurma.IdTurma);
            var tarefa = _tarefas.Por(tarefaTurma.IdTarefa);

            if (turma.Tarefas == null)
            {
                turma.Tarefas = new List <Tarefa>();
            }

            turma.Tarefas.Add(tarefa);
            tarefa.Turmas.Add(turma);

            _tarefas.Salvar(tarefa);

            foreach (var aluno in turma.Alunos)
            {
                _resolucoes.SalvarResolucaoTarefa(new ResolucaoTarefa {
                    Aluno   = aluno,
                    Tarefa  = tarefa,
                    Enviada = false
                });
            }

            return(Ok());
        }
        private List <ResolucaoQuestao> ObterResolucaoQuestao(Interface.Resolucao arg)
        {
            var resolucoes      = new Resolucoes(NhibernateSetup.GetSession());
            var listaResolucoes = resolucoes.ResolucaoQuestaoPorTarefaEAluno(arg.IdTarefa, arg.Questoes.First().IdAluno).ToList();

            if (listaResolucoes.Any())
            {
                foreach (var resolucaoQuestao in listaResolucoes)
                {
                    resolucaoQuestao.Comentario = arg.Questoes.First(q => q.Id == resolucaoQuestao.Questao.Id).Comentario;
                    resolucaoQuestao.Resposta   = arg.Questoes.First(q => q.Id == resolucaoQuestao.Questao.Id).Resposta;
                }
            }

            var tarefas  = new Tarefas(NhibernateSetup.GetSession());
            var alunos   = new Alunos(NhibernateSetup.GetSession());
            var questoes = new Questoes(NhibernateSetup.GetSession());

            var tarefa = tarefas.Por(arg.IdTarefa);
            var aluno  = alunos.Por(arg.Questoes.First().IdAluno);

            var novasQuestoes = new List <Interface.Questao>();

            foreach (var questao in arg.Questoes.Where(q => q.Resposta != null))
            {
                if (listaResolucoes.All(l => l.Questao.Id != questao.Id))
                {
                    novasQuestoes.Add(questao);
                }
            }

            foreach (var questao in novasQuestoes)
            {
                var resolucaoQuestao = new ResolucaoQuestao();
                resolucaoQuestao.Tarefa     = tarefa;
                resolucaoQuestao.Aluno      = aluno;
                resolucaoQuestao.Resposta   = questao.Resposta;
                resolucaoQuestao.Comentario = questao.Comentario;

                resolucaoQuestao.Questao = questoes.Por(questao.Id);

                listaResolucoes.Add(resolucaoQuestao);
            }

            return(listaResolucoes);
        }
        public IHttpActionResult PorId(int idTarefa, int idAluno)
        {
            if (idTarefa <= 0 || idAluno <= 0)
            {
                return(BadRequest("É necessário informar o aluno e a tarefa."));
            }

            var tarefaEncontrada      = _tarefas.Por(idTarefa);
            var listaResolucaoQuestao = _resolucoes.ResolucaoQuestaoPorTarefaEAluno(tarefaEncontrada.Id, idAluno);

            var resolucaoMapeada = _mapper.Map <Interface.Resolucao>(tarefaEncontrada);

            if (listaResolucaoQuestao.Any())
            {
                foreach (var item in resolucaoMapeada.Questoes)
                {
                    item.Comentario = listaResolucaoQuestao.FirstOrDefault(l => l.Questao.Id == item.Id)?.Comentario;
                    item.Resposta   = listaResolucaoQuestao.FirstOrDefault(l => l.Questao.Id == item.Id)?.Resposta;
                }
            }


            return(Ok(resolucaoMapeada));
        }