Skip to content

Commit

Permalink
Merge pull request #615 from prefeiturasp/fix/105982
Browse files Browse the repository at this point in the history
fix/105982
  • Loading branch information
FernandoGroeler authored May 13, 2024
2 parents 996345a + 135704f commit 036fbd1
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@ namespace SME.SERAp.Prova.Aplicacao
{
public class ObterProvaResultadoResumoQuery : IRequest<IEnumerable<ProvaResultadoResumoDto>>
{
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; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ namespace SME.SERAp.Prova.Aplicacao
{
public class ObterProvaResultadoResumoQueryHandler : IRequestHandler<ObterProvaResultadoResumoQuery, IEnumerable<ProvaResultadoResumoDto>>
{

private readonly IRepositorioProva repositorioProva;

public ObterProvaResultadoResumoQueryHandler(IRepositorioProva repositorioProva)
Expand All @@ -19,7 +18,7 @@ public ObterProvaResultadoResumoQueryHandler(IRepositorioProva repositorioProva)

public async Task<IEnumerable<ProvaResultadoResumoDto>> Handle(ObterProvaResultadoResumoQuery request, CancellationToken cancellationToken)
{
return await repositorioProva.ObterResultadoResumoProvaAsync(request.ProvaId, request.AlunoRa);
return await repositorioProva.ObterResultadoResumoProvaAsync(request.ProvaId, request.AlunoRa, request.Caderno);
}
}
}
Original file line number Diff line number Diff line change
@@ -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
{
Expand All @@ -17,7 +18,16 @@ public async Task<ProvaResultadoDto> 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
{
Expand Down
2 changes: 1 addition & 1 deletion src/SME.SERAp.Prova.Dados/Interfaces/IRepositorioProva.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public interface IRepositorioProva : IRepositorioBase<Dominio.Prova>
Task<bool> VerificaSeExistePorProvaSerapId(long provaId);
Task<IEnumerable<ProvaAnoDto>> ObterProvasAdesaoAlunoAsync(long alunoRa, long turmaId);
Task<PaginacaoResultadoDto<ProvaAreaAdministrativoRetornoDto>> ObterProvasPaginada(ProvaAdmFiltroDto provaAdmFiltroDto, bool inicioFuturo, Guid? perfil, string login);
Task<IEnumerable<ProvaResultadoResumoDto>> ObterResultadoResumoProvaAsync(long provaId, long alunoRa);
Task<IEnumerable<ProvaResultadoResumoDto>> ObterResultadoResumoProvaAsync(long provaId, long alunoRa, string caderno = null);
Task<IEnumerable<ProvaTaiResultadoDto>> ObterResultadoResumoProvaTaiAsync(long provaId, long alunoRa);
}
}
40 changes: 22 additions & 18 deletions src/SME.SERAp.Prova.Dados/Repositorios/Serap/RepositorioProva.cs
Original file line number Diff line number Diff line change
Expand Up @@ -391,28 +391,32 @@ public async Task<PaginacaoResultadoDto<ProvaAreaAdministrativoRetornoDto>> Obte
return retorno;
}

public async Task<IEnumerable<ProvaResultadoResumoDto>> ObterResultadoResumoProvaAsync(long provaId, long alunoRa)
public async Task<IEnumerable<ProvaResultadoResumoDto>> 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<ProvaResultadoResumoDto>(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<ProvaResultadoResumoDto>(query.ToString(), new { provaId, alunoRa, caderno });
}
finally
{
Expand Down

0 comments on commit 036fbd1

Please sign in to comment.