public async Task <int> AdicionarAvaliacaoOpcaoAsync(string descricao, bool resposta, int id_avaliacao_questao) { var avaliacaoOpcao = new AvaliacaoOpcao() { IdAvaliacaoQuestao = id_avaliacao_questao, Descricao = descricao, Resposta = resposta, CriadoEm = DateTime.Now, AtualizadoEm = DateTime.Now }; _avaliacaoOpcaoRepository.Adicionar(avaliacaoOpcao); await _avaliacaoOpcaoRepository.SaveChangesAsync(); return(avaliacaoOpcao.Id); }
public async Task <int> SalvarProvaAsync(ProvaQueryResult prova, string login) { var aluno = await _alunoRepository.ObterPorLogin(login); if (aluno == null) { throw new Exception("O aluno não foi localizado!"); } var publicacao = await _publicacaoRepository.ObterComRelacoesAsync(prova.PublicacaoId); if (publicacao == null) { throw new Exception("A publicacao não foi localizada!"); } if (publicacao.DataInicio >= DateTime.Now || publicacao.DataFim <= DateTime.Now) { throw new Exception("Prova fora da data de realização!"); } if (!publicacao.Turma.Alunos.Select(a => a.Id).ToList().Contains(aluno.Id)) { throw new Exception("Publicação não disponível para esse aluno!"); } var Novaprova = new Prova() { IdAluno = aluno.Id, IdPublicacao = publicacao.Id, IdAvaliacao = publicacao.IdAvaliacao, CriadoEm = DateTime.Now, AtualizadoEm = DateTime.Now, Questoes = prova.Questoes.Select(q => new ProvaQuestao { IdAvaliacaoQuestao = q.QuestaoId, IdProva = 0, Nota = 0, AtualizadoEm = DateTime.Now, CriadoEm = DateTime.Now, }).ToList() }; Avaliacao av = publicacao.Avaliacao; for (int i = 0; i < av.Questoes.Count; i++) { Novaprova.Questoes[i].Opcoes = new List <ProvaOpcao>(); if (av.Questoes[i].Tipo == 1) { for (int j = 0; j < av.Questoes[i].Opcoes.Count; j++) { AvaliacaoOpcao op = av.Questoes[i].Opcoes[j]; OpcaoProvaQueryResult opResposta = prova.Questoes[i].Opcoes[j]; Novaprova.Questoes[i].Opcoes.Add(new ProvaOpcao { IdAvaliacaoOpcao = opResposta.OpcaoAvaliacaoId, Resposta = opResposta.Resposta }); if (op.Resposta == opResposta.Resposta) { Novaprova.Questoes[i].Nota = 1; } } } else { double valorOpcao = 1.0 / av.Questoes[i].Opcoes.Count(); for (int j = 0; j < av.Questoes[i].Opcoes.Count; j++) { AvaliacaoOpcao op = av.Questoes[i].Opcoes[j]; OpcaoProvaQueryResult opResposta = prova.Questoes[i].Opcoes[j]; Novaprova.Questoes[i].Opcoes.Add(new ProvaOpcao { IdAvaliacaoOpcao = opResposta.OpcaoAvaliacaoId, Resposta = opResposta.Resposta }); if (op.Resposta == opResposta.Resposta) { Novaprova.Questoes[i].Nota += valorOpcao; } } } } _provaRepository.Adicionar(Novaprova); await _provaRepository.SaveChangesAsync(); return(Novaprova.Id); }