# 🛡️ Guia de Prevenção de Loop Infinito - BaseDomainComponent ## Problema Identificado O componente de drivers estava causando um **loop infinito** nas requisições da API `getDrivers()`, conforme evidenciado pelo DevTools mostrando centenas de chamadas consecutivas em poucos segundos. ## Medidas de Proteção Implementadas ### 1. **Controle de Inicialização** ```typescript private _isInitialized = false; private _setupDomainCalled = false; ngOnInit() { if (this._isInitialized) { console.warn('[BaseDomainComponent] Tentativa de re-inicialização bloqueada'); return; } // ... resto da inicialização this._isInitialized = true; } ``` ### 2. **Prevenção de Setup Duplicado** ```typescript private setupDomain(): void { if (this._setupDomainCalled) { console.warn('[BaseDomainComponent] setupDomain já foi executado, evitando duplicação'); return; } this._setupDomainCalled = true; // ... configuração do domínio } ``` ### 3. **Proteção Dupla para loadEntitites()** ```typescript private _isLoadingEntities = false; private _lastLoadTime = 0; loadEntities(currentPage = this.currentPage, itemsPerPage = this.itemsPerPage) { const now = Date.now(); // Proteção 1: Verificar se já está carregando if (this.isLoading || this._isLoadingEntities) { console.warn('[BaseDomainComponent] Tentativa de carregamento rejeitada - já está carregando'); return; } // Proteção 2: Evitar chamadas muito frequentes (< 100ms) if (now - this._lastLoadTime < 100) { console.warn('[BaseDomainComponent] Tentativa de carregamento rejeitada - chamada muito frequente'); return; } this._lastLoadTime = now; this.isLoading = true; this._isLoadingEntities = true; // ... requisição da API } ``` ### 4. **Controle de Detecção de Mudanças** ```typescript // Forçar detecção de mudanças de forma controlada this.cdr.detectChanges(); ``` ## Logs de Monitoramento As seguintes mensagens de warning aparecerão no console se houver tentativas de loop: - `[BaseDomainComponent] Tentativa de re-inicialização bloqueada` - `[BaseDomainComponent] setupDomain já foi executado, evitando duplicação` - `[BaseDomainComponent] Tentativa de carregamento rejeitada - já está carregando` - `[BaseDomainComponent] Tentativa de carregamento rejeitada - chamada muito frequente` ## Monitoramento Recomendado 1. **DevTools Network Tab**: Verificar se as requisições `driver?page=1&limit=10&` não estão mais em loop 2. **Console**: Monitorar se aparecem warnings de prevenção de loop 3. **Performance**: Verificar se a CPU não está mais sobrecarregada ## Causas Prováveis do Loop Original 1. **Ciclo de Vida Duplicado**: O componente estava sendo inicializado múltiplas vezes 2. **Detecção de Mudanças**: O Angular pode ter entrado em loop de detecção de mudanças 3. **Subscription não controlada**: Observables podem ter causado chamadas em cascata 4. **Tab System**: Interação problemática entre tabs e o sistema de dados ## Testagem Para testar se a correção funcionou: 1. Abrir a página de drivers 2. Verificar o DevTools → Network tab 3. Confirmar que apenas **1 requisição inicial** é feita 4. Testar paginação, filtros e ordenação para verificar chamadas controladas 5. Verificar se não há warnings no console ## Impacto na Performance ✅ **Antes**: Centenas de requisições por segundo ✅ **Depois**: 1 requisição inicial + chamadas controladas apenas quando necessário Essas proteções garantem que: - O componente seja inicializado apenas uma vez - As requisições sejam feitas de forma controlada - O sistema seja resiliente a problemas de ciclo de vida - A performance seja otimizada