public async Task <int> AdicionarAvaliacaoQuestaoAsync(string enunciado, int tipo, int id_avaliacao, List <AvaliacaoOpcao> opcoes) { var avaliacaoQuestao = new AvaliacaoQuestao() { Enunciado = enunciado, Tipo = tipo, IdAvaliacao = id_avaliacao, CriadoEm = DateTime.Now, AtualizadoEm = DateTime.Now, Opcoes = opcoes }; if (avaliacaoQuestao.Opcoes == null || avaliacaoQuestao.Opcoes.Count < 4) { throw new Exception("Uma questão deve conter ao menos 4 opções!"); } else { if (avaliacaoQuestao.Tipo == 1) { bool hasTrue = false; foreach (AvaliacaoOpcao op in avaliacaoQuestao.Opcoes) { if (op.Resposta && !hasTrue) { hasTrue = true; } else if (op.Resposta && hasTrue) { throw new Exception("Questões múltipla escolha devem ter apenas uma opção verdadeira!"); } } if (!hasTrue) { throw new Exception("Questões múltipla escolha devem ter ao menos uma opção verdadeira!"); } } _avaliacaoQuestaoRepository.Adicionar(avaliacaoQuestao); await _avaliacaoQuestaoRepository.SaveChangesAsync(); return(avaliacaoQuestao.Id); } }
public async Task <IActionResult> Create([Bind("Tipo,Enunciado,IdAvaliacao,Opcoes")] AvaliacaoQuestao questao) { Avaliacao avaliacao = await _avaliacaoRepo.ObterAsync(questao.IdAvaliacao); ViewData["Avaliacao"] = avaliacao; try { if (ModelState.IsValid) { int id_opcao = await _avaliacaoQuestaoService.AdicionarAvaliacaoQuestaoAsync(questao.Enunciado, questao.Tipo, questao.IdAvaliacao, questao.Opcoes); return(RedirectToAction("Edit", "Avaliacao", new { id = questao.IdAvaliacao })); } return(View(questao)); } catch (Exception e) { ViewData["ErrorMessage"] = e.Message; return(View(questao)); } }