public async Task <RecuperacaoParalelaListagemDto> Salvar(RecuperacaoParalelaDto recuperacaoParalelaDto)
        {
            var list = new List <RecuperacaoParalelaListagemDto>();

            //var usuarioLogado = await servicoUsuario.ObterUsuarioLogado();
            var usuarioLogin  = servicoUsuario.ObterLoginAtual();
            var usuarioPerfil = servicoUsuario.ObterPerfilAtual();


            var turmaRecuperacaoParalelaId = recuperacaoParalelaDto.Periodo.Alunos.FirstOrDefault().TurmaRecuperacaoParalelaId;
            var turmaRecuperacaoParalela   = await mediator.Send(new ObterTurmaSimplesPorIdQuery(turmaRecuperacaoParalelaId));

            //var turmaCodigo = recuperacaoParalelaDto.Periodo.Alunos.FirstOrDefault().TurmaRecuperacaoParalelaId;

            var turmaPap = await servicoEOL.TurmaPossuiComponenteCurricularPAP(turmaRecuperacaoParalela.Codigo, usuarioLogin, usuarioPerfil);

            if (!turmaPap)
            {
                throw new NegocioException("Somente é possivel realizar acompanhamento para turmas PAP");
            }

            var turmasCodigo = recuperacaoParalelaDto.Periodo.Alunos.Select(a => a.TurmaId.ToString()).Distinct().ToArray();

            var turmas = await mediator.Send(new ObterTurmasPorCodigosQuery(turmasCodigo));

            unitOfWork.IniciarTransacao();

            foreach (var item in recuperacaoParalelaDto.Periodo.Alunos)
            {
                var turmaDoItem         = turmas.FirstOrDefault(a => a.CodigoTurma == item.TurmaId.ToString());
                var recuperacaoParalela = MapearEntidade(recuperacaoParalelaDto, item, turmaDoItem.Id, turmaRecuperacaoParalela.Id, turmaDoItem.AnoLetivo);

                await repositorioRecuperacaoParalela.SalvarAsync(recuperacaoParalela);

                await repositorioRecuperacaoParalelaPeriodoObjetivoResposta.Excluir(item.Id, recuperacaoParalelaDto.Periodo.Id);
                await SalvarRespostasAluno(recuperacaoParalelaDto, item, recuperacaoParalela);
            }
            unitOfWork.PersistirTransacao();

            return(await consultaRecuperacaoParalela.Listar(new Infra.FiltroRecuperacaoParalelaDto
            {
                Ordenacao = recuperacaoParalelaDto.Ordenacao,
                PeriodoId = recuperacaoParalelaDto.Periodo.Id,
                TurmaId = turmaRecuperacaoParalelaId,
                TurmaCodigo = long.Parse(turmaRecuperacaoParalela.Codigo)
            }));
        }
        public async Task <RecuperacaoParalelaListagemDto> Salvar(RecuperacaoParalelaDto recuperacaoParalelaDto)
        {
            var list = new List <RecuperacaoParalelaListagemDto>();

            unitOfWork.IniciarTransacao();
            foreach (var item in recuperacaoParalelaDto.Periodo.Alunos)
            {
                var recuperacaoParalela = new RecuperacaoParalela
                {
                    Id      = item.Id,
                    TurmaId = item.TurmaId,
                    TurmaRecuperacaoParalelaId = item.TurmaRecuperacaoParalelaId,
                    Aluno_id  = item.CodAluno,
                    CriadoEm  = recuperacaoParalelaDto.Periodo.CriadoEm ?? default,
                    CriadoRF  = recuperacaoParalelaDto.Periodo.CriadoRF ?? null,
                    CriadoPor = recuperacaoParalelaDto.Periodo.CriadoPor ?? null
                };

                await repositorioRecuperacaoParalela.SalvarAsync(recuperacaoParalela);

                await repositorioRecuperacaoParalelaPeriodoObjetivoResposta.Excluir(item.Id, recuperacaoParalelaDto.Periodo.Id);

                foreach (var resposta in recuperacaoParalelaDto.Periodo.Alunos.Where(w => w.CodAluno == item.CodAluno).FirstOrDefault().Respostas)
                {
                    await repositorioRecuperacaoParalelaPeriodoObjetivoResposta.SalvarAsync(new RecuperacaoParalelaPeriodoObjetivoResposta
                    {
                        ObjetivoId = resposta.ObjetivoId,
                        PeriodoRecuperacaoParalelaId = recuperacaoParalelaDto.Periodo.Id,
                        RecuperacaoParalelaId        = recuperacaoParalela.Id,
                        RespostaId = resposta.RespostaId
                    });
                }
            }
            unitOfWork.PersistirTransacao();
            return(await consultaRecuperacaoParalela.Listar(new Infra.FiltroRecuperacaoParalelaDto
            {
                Ordenacao = recuperacaoParalelaDto.Ordenacao,
                PeriodoId = recuperacaoParalelaDto.Periodo.Id,
                TurmaId = recuperacaoParalelaDto.Periodo.Alunos.FirstOrDefault().TurmaRecuperacaoParalelaId
            }));
        }
    }