From 135704f50b605efa7e0e1bd22943b678e85c2a24 Mon Sep 17 00:00:00 2001 From: "fernando.groeler" Date: Mon, 13 May 2024 15:44:11 -0400 Subject: [PATCH] Ajustada consulta do resumo da prova para considerar o caderno para provas bib. --- .../ObterProvaResultadoResumoQuery.cs | 8 ++-- .../ObterProvaResultadoResumoQueryHandler.cs | 3 +- .../ObterProvaResultadoResumoUseCase.cs | 12 +++++- .../Interfaces/IRepositorioProva.cs | 2 +- .../Repositorios/Serap/RepositorioProva.cs | 40 ++++++++++--------- 5 files changed, 40 insertions(+), 25 deletions(-) diff --git a/src/SME.SERAp.Prova.Aplicacao/Queries/ObterProvaResultadoResumo/ObterProvaResultadoResumoQuery.cs b/src/SME.SERAp.Prova.Aplicacao/Queries/ObterProvaResultadoResumo/ObterProvaResultadoResumoQuery.cs index 585fe042..d448a091 100644 --- a/src/SME.SERAp.Prova.Aplicacao/Queries/ObterProvaResultadoResumo/ObterProvaResultadoResumoQuery.cs +++ b/src/SME.SERAp.Prova.Aplicacao/Queries/ObterProvaResultadoResumo/ObterProvaResultadoResumoQuery.cs @@ -6,13 +6,15 @@ namespace SME.SERAp.Prova.Aplicacao { public class ObterProvaResultadoResumoQuery : IRequest> { - public ObterProvaResultadoResumoQuery(long provaId, long alunoRa) + public ObterProvaResultadoResumoQuery(long provaId, long alunoRa, string caderno = null) { ProvaId = provaId; AlunoRa = alunoRa; + Caderno = caderno; } - public long ProvaId { get; set; } - public long AlunoRa { get; set; } + public long ProvaId { get; } + public long AlunoRa { get; } + public string Caderno { get; } } } diff --git a/src/SME.SERAp.Prova.Aplicacao/Queries/ObterProvaResultadoResumo/ObterProvaResultadoResumoQueryHandler.cs b/src/SME.SERAp.Prova.Aplicacao/Queries/ObterProvaResultadoResumo/ObterProvaResultadoResumoQueryHandler.cs index 580c39eb..99e08add 100644 --- a/src/SME.SERAp.Prova.Aplicacao/Queries/ObterProvaResultadoResumo/ObterProvaResultadoResumoQueryHandler.cs +++ b/src/SME.SERAp.Prova.Aplicacao/Queries/ObterProvaResultadoResumo/ObterProvaResultadoResumoQueryHandler.cs @@ -9,7 +9,6 @@ namespace SME.SERAp.Prova.Aplicacao { public class ObterProvaResultadoResumoQueryHandler : IRequestHandler> { - private readonly IRepositorioProva repositorioProva; public ObterProvaResultadoResumoQueryHandler(IRepositorioProva repositorioProva) @@ -19,7 +18,7 @@ public ObterProvaResultadoResumoQueryHandler(IRepositorioProva repositorioProva) public async Task> Handle(ObterProvaResultadoResumoQuery request, CancellationToken cancellationToken) { - return await repositorioProva.ObterResultadoResumoProvaAsync(request.ProvaId, request.AlunoRa); + return await repositorioProva.ObterResultadoResumoProvaAsync(request.ProvaId, request.AlunoRa, request.Caderno); } } } diff --git a/src/SME.SERAp.Prova.Aplicacao/UseCase/ObterProvaResultadoResumoUseCase.cs b/src/SME.SERAp.Prova.Aplicacao/UseCase/ObterProvaResultadoResumoUseCase.cs index f4986289..60ea5315 100644 --- a/src/SME.SERAp.Prova.Aplicacao/UseCase/ObterProvaResultadoResumoUseCase.cs +++ b/src/SME.SERAp.Prova.Aplicacao/UseCase/ObterProvaResultadoResumoUseCase.cs @@ -1,6 +1,7 @@ using MediatR; using SME.SERAp.Prova.Infra; using System.Threading.Tasks; +using SME.SERAp.Prova.Infra.Exceptions; namespace SME.SERAp.Prova.Aplicacao.UseCase { @@ -17,7 +18,16 @@ public async Task Executar(long provaId) { var ra = await mediator.Send(new ObterRAUsuarioLogadoQuery()); var proficiencia = await mediator.Send(new ObterProficienciaFinalPorProvaQuery(ra, provaId)); - var resumo = await mediator.Send(new ObterProvaResultadoResumoQuery(provaId, ra)); + + var prova = await mediator.Send(new ObterProvaPorIdQuery(provaId)); + if (prova == null) + throw new NegocioException($"Prova {provaId} não localizada para obter o resumo do resultado do aluno."); + + string caderno = null; + if (prova.PossuiBIB) + caderno = await mediator.Send(new ObterCadernoAlunoPorProvaIdRaQuery(provaId, ra)); + + var resumo = await mediator.Send(new ObterProvaResultadoResumoQuery(provaId, ra, caderno)); var provaResultado = new ProvaResultadoDto { diff --git a/src/SME.SERAp.Prova.Dados/Interfaces/IRepositorioProva.cs b/src/SME.SERAp.Prova.Dados/Interfaces/IRepositorioProva.cs index e402a48f..abc4704e 100644 --- a/src/SME.SERAp.Prova.Dados/Interfaces/IRepositorioProva.cs +++ b/src/SME.SERAp.Prova.Dados/Interfaces/IRepositorioProva.cs @@ -17,7 +17,7 @@ public interface IRepositorioProva : IRepositorioBase Task VerificaSeExistePorProvaSerapId(long provaId); Task> ObterProvasAdesaoAlunoAsync(long alunoRa, long turmaId); Task> ObterProvasPaginada(ProvaAdmFiltroDto provaAdmFiltroDto, bool inicioFuturo, Guid? perfil, string login); - Task> ObterResultadoResumoProvaAsync(long provaId, long alunoRa); + Task> ObterResultadoResumoProvaAsync(long provaId, long alunoRa, string caderno = null); Task> ObterResultadoResumoProvaTaiAsync(long provaId, long alunoRa); } } diff --git a/src/SME.SERAp.Prova.Dados/Repositorios/Serap/RepositorioProva.cs b/src/SME.SERAp.Prova.Dados/Repositorios/Serap/RepositorioProva.cs index 0144e357..954ae8ae 100644 --- a/src/SME.SERAp.Prova.Dados/Repositorios/Serap/RepositorioProva.cs +++ b/src/SME.SERAp.Prova.Dados/Repositorios/Serap/RepositorioProva.cs @@ -391,28 +391,32 @@ public async Task> Obte return retorno; } - public async Task> ObterResultadoResumoProvaAsync(long provaId, long alunoRa) + public async Task> ObterResultadoResumoProvaAsync(long provaId, long alunoRa, string caderno = null) { using var conn = ObterConexaoLeitura(); try { - var query = @"select distinct - q.questao_legado_id as IdQuestaoLegado, - q.enunciado as DescricaoQuestao, - q.ordem as OrdemQuestao, - q.tipo as TipoQuestao, - a.numeracao as AlternativaAluno, - a2.numeracao as AlternativaCorreta, - a.correta, - case when qar.resposta is null then false else true end as respostaConstruidaRespondida - from questao q - left join questao_aluno_resposta qar on qar.questao_id = q.id and qar.aluno_ra = @alunoRa - left join alternativa a on a.id = qar.alternativa_id - left join alternativa a2 on a2.questao_id = q.id and a2.correta - where q.prova_id = @provaId - order by q.ordem"; - - return await conn.QueryAsync(query, new { provaId, alunoRa }); + var query = new StringBuilder(@"select distinct + q.questao_legado_id as IdQuestaoLegado, + q.enunciado as DescricaoQuestao, + q.ordem as OrdemQuestao, + q.tipo as TipoQuestao, + a.numeracao as AlternativaAluno, + a2.numeracao as AlternativaCorreta, + a.correta, + case when qar.resposta is null then false else true end as respostaConstruidaRespondida + from questao q + left join questao_aluno_resposta qar on qar.questao_id = q.id and qar.aluno_ra = @alunoRa + left join alternativa a on a.id = qar.alternativa_id + left join alternativa a2 on a2.questao_id = q.id and a2.correta + where q.prova_id = @provaId"); + + if (!string.IsNullOrEmpty(caderno)) + query.AppendLine(" and q.caderno = @caderno "); + + query.AppendLine(" order by q.ordem "); + + return await conn.QueryAsync(query.ToString(), new { provaId, alunoRa, caderno }); } finally {