private async Task BuscaAbrangenciaEPersiste(string login, Guid perfil) { try { const string breadcrumb = "SGP API - Tratamento de Abrangência"; Task <AbrangenciaCompactaVigenteRetornoEOLDTO> consultaEol = null; var ehSupervisor = perfil == Perfis.PERFIL_SUPERVISOR; var ehProfessorCJ = perfil == Perfis.PERFIL_CJ; SentrySdk.AddBreadcrumb($"{breadcrumb} - Chamada BuscaAbrangenciaEPersiste - Login: {login}, perfil {perfil} - EhSupervisor: {ehSupervisor}, EhProfessorCJ: {ehProfessorCJ}", "SGP Api - Negócio"); if (ehSupervisor) { consultaEol = TratarRetornoSupervisor(ObterAbrangenciaEolSupervisor(login)); } else if (ehProfessorCJ) { return; } else { consultaEol = servicoEOL.ObterAbrangenciaCompactaVigente(login, perfil); } if (consultaEol != null) { // Enquanto o EOl consulta, tentamos ganhar tempo obtendo a consulta sintetica var consultaAbrangenciaSintetica = repositorioAbrangencia.ObterAbrangenciaSintetica(login, perfil, string.Empty); var abrangenciaEol = await consultaEol; var abrangenciaSintetica = await consultaAbrangenciaSintetica; if (abrangenciaEol == null) { throw new NegocioException("Não foi possível localizar registros de abrangência para este usuário."); } IEnumerable <Dre> dres = Enumerable.Empty <Dre>(); IEnumerable <Ue> ues = Enumerable.Empty <Ue>(); IEnumerable <Turma> turmas = Enumerable.Empty <Turma>(); // sincronizamos as dres, ues e turmas MaterializarEstruturaInstitucional(abrangenciaEol, ref dres, ref ues, ref turmas); // sincronizamos a abrangencia do login + perfil unitOfWork.IniciarTransacao(); SincronizarAbrangencia(abrangenciaSintetica, abrangenciaEol.Abrangencia.Abrangencia, ehSupervisor, dres, ues, turmas, login, perfil); unitOfWork.PersistirTransacao(); } } catch (Exception ex) { SentrySdk.CaptureException(ex); throw ex; } }