public async Task <ProvaQueryResult> ObterProvaAsync(int publicacaoId, string login) { var aluno = _alunoRepository.ObterPorLogin(login); if (aluno == null) { throw new Exception("O aluno não foi localizado!"); } var publicacao = await _publicacaoRepository.ObterComRelacoesAsync(publicacaoId); if (publicacao == null) { throw new Exception("A publicacao não foi localizada!"); } var avaliacaoCompleta = await _avaliacaoRepository.ObterComRelacoesAsync(publicacao.IdAvaliacao); var provaCompleta = await _provaRepository.ObterProvaDoAlunoAsync(publicacao.IdAvaliacao, aluno.Id); var retorno = new ProvaQueryResult() { AvaliacaoId = publicacao.IdAvaliacao, PublicacaoId = publicacao.Id, Avaliacao = publicacao.Avaliacao, Publicacao = publicacao, Questoes = avaliacaoCompleta.Questoes.Select(x => new QuestaoProvaQueryResult() { QuestaoId = x.Id, Enunciado = x.Enunciado, Tipo = x.Tipo, Completa = false, Opcoes = x.Opcoes.Select(y => new OpcaoProvaQueryResult() { OpcaoAvaliacaoId = y.Id, QuestaoId = y.IdAvaliacaoQuestao, Descricao = y.Descricao, Resposta = false }).ToList() }).ToList() }; retorno.Questoes.SelectMany(x => x.Opcoes).ToList().ForEach(x => { x.Resposta = provaCompleta?.Questoes? .SelectMany(y => y.Opcoes) .FirstOrDefault(y => y.IdAvaliacaoOpcao == x.OpcaoAvaliacaoId)?.Resposta ?? false; }); return(retorno); }
// GET: Publicacao/Details/5 public async Task <IActionResult> Details(int?id) { if (id == null) { return(NotFound()); } var publicacao = await _publicacaoRepository.ObterComRelacoesAsync(id.Value); if (publicacao == null) { return(NotFound()); } return(View(publicacao)); }