Skip to content

chore(eslint): DDD refactor de imports — fechar Onda 5 (PR 5.3)#112

Merged
adm01-debug merged 1 commit into
mainfrom
chore/onda-5-pr-5.3-no-restricted-imports-refactor
May 9, 2026
Merged

chore(eslint): DDD refactor de imports — fechar Onda 5 (PR 5.3)#112
adm01-debug merged 1 commit into
mainfrom
chore/onda-5-pr-5.3-no-restricted-imports-refactor

Conversation

@adm01-debug
Copy link
Copy Markdown
Owner

@adm01-debug adm01-debug commented May 9, 2026

🎉 Fecha Onda 5

Reduz ESLint errors de 108 → 0 (-108, fim da Onda 5).

ESLint TOTAL desde início da Onda 5: 164 → 0 em 4 PRs (#109, #110, #111, este).

Estratégia DDD

A regra no-restricted-imports (eslint.config.js) bloqueia:

  1. Imports cross-feature deep (@/features/X/...) — força entry points
  2. Imports relativos profundos (../../...)
  3. INTRA-feature via alias (@/features/X/Y quando arquivo está em X)

Diff stat

44 files changed, 108 insertions(+), 108 deletions(-)
+ 1 .gitignore entry (design-system-audit.md gerado pelo lint)

Batch A — INTRA-feature (106 fixes)

Pattern: @/features/X/Y/Z → caminho relativo via path.relative()

Exemplo (src/features/inbox/components/chat/ChatHeader.tsx):

  • ANTES: @/features/inbox/components/ai-tools/VisionIcon
  • DEPOIS: ../ai-tools/VisionIcon

Distribuição:

  • 92 inbox (52 chat, 12 contact-details, 8 components, 5 hooks, 3 services, 3 virtualized, 3 conversation-list, 2 realtime, 2 templates, 2 search, 1 monitoring, 1 mocks)
  • 7 auth, 3 admin, 3 connections, 1 sla

Script: Node + path.relative(), 1 read/write por arquivo, ordem desc por linha. 106/106 sucesso.

Batch B — CROSS-feature (2 fixes)

Imports de outra feature DEVEM usar entry point (@/features/X),
não path interno. Os barrels já existiam, só não estavam sendo usados:

  • ChatPanel.tsx: @/features/auth/hooks/useUserRole@/features/auth
  • RealtimeInboxView.tsx: @/features/sla/hooks/useSLAAlerts@/features/sla

Validação

  • bunx eslint .0 errors, 1330 warnings ✅
  • bunx tsc --noEmit → ✓ sem erros (typecheck pristine) ✅
  • bun run build → ✓ built in 58.09s ✅
  • 44 files changed, 108 insertions(+), 108 deletions(-)

Stress-test (10 cenários ✓)

  • path.relative gera ../foo ou ./foo corretamente
  • ✅ Sem imports circulares (auth/sla não importam inbox)
  • ✅ Comments inline preservados
  • ✅ TS path mapping continua funcionando
  • ✅ Typecheck sem regressão
  • ✅ Sem sessão paralela (verificado git reflog)
  • ✅ Barrels já existiam (auth/index.ts, sla/index.ts)
  • ✅ ESLint --fix NÃO usado (só explicit replace)
  • design-system-audit.md gerado pelo lint adicionado ao .gitignore

Onda 5 — Status FINAL

PR Title Errors fixados
#109 quick-win errors (5.1) 164 → 142 (-22)
#110 no-explicit-any tests/mocks (5.2a) 142 → 128 (-14)
#111 residual errors (5.2.1) 128 → 108 (-20)
#112 DDD refactor (5.3) 108 → 0 (-108)

🎉 Total: 164 errors zerados.

Pós-Onda 5 (próximos passos)

Governança

Considerado GRANDE (44 files), seguindo padrão Onda 1+2.
Stress-test de 10 cenários documentado.

🤖 Generated with Claude

Summary by CodeRabbit

Notas de Lançamento

  • Refactor

    • Reorganização interna da estrutura de módulos para melhor manutenibilidade e consistência do código.
  • Chores

    • Atualização do arquivo de configuração de projeto para ignorar artefatos gerados automaticamente.

Review Change Stack

🎉 Fecha Onda 5: 108 → 0 errors (-108).

ESLint TOTAL: 164 → 0 errors em 4 PRs (#109, #110, #111, este).

## Estratégia DDD

Regra `no-restricted-imports` (eslint.config.js) bloqueia:
1. Imports cross-feature deep (`@/features/X/...`) — força entry points
2. Imports relativos profundos (`../../...`)
3. INTRA-feature via alias (`@/features/X/Y` quando arquivo está em X)

## Batch A — INTRA-feature (106 fixes em 42 arquivos)

Pattern: `@/features/X/Y/Z` → caminho relativo via path.relative()

Ex (src/features/inbox/components/chat/ChatHeader.tsx):
- ANTES: `@/features/inbox/components/ai-tools/VisionIcon`
- DEPOIS: `../ai-tools/VisionIcon`

Distribuição:
- 92 inbox (52 chat, 12 contact-details, 8 components, 5 hooks, 3 services, 3 virtualized, 3 conversation-list, 2 realtime, 2 templates, 2 search, 1 monitoring, 1 mocks)
- 7 auth (5 components, 1 hooks, 1 context)
- 3 admin (2 hooks, 1 services)
- 3 connections (2 hooks, 1 services)
- 1 sla (1 components)

Script: /tmp/fix-intra.mjs (Node + path.relative)
- 106/106 sucesso, zero falhas
- 1 read/write por arquivo (eficiente)
- Ordem desc por linha (não invalida índices)

## Batch B — CROSS-feature (2 fixes)

Imports de outra feature DEVEM usar entry point (`@/features/X`),
não path interno (`@/features/X/hooks/...`).

Os barrels já existiam (`auth/index.ts` e `sla/index.ts` fazem
`export * from './hooks'`), só não estavam sendo usados:

- src/features/inbox/components/ChatPanel.tsx:
  `@/features/auth/hooks/useUserRole` → `@/features/auth`
- src/features/inbox/components/RealtimeInboxView.tsx:
  `@/features/sla/hooks/useSLAAlerts` → `@/features/sla`

## Validação

- bunx eslint . → 0 errors, 1330 warnings (Onda 5 ZERADA)
- bunx tsc --noEmit → ✓ sem erros (typecheck pristine)
- bun run build → ✓ built in 58.09s (zero regressões)
- 44 files changed, 108 insertions(+), 108 deletions(-)

## Stress-test (10 cenários)

✓ path.relative gera `../foo` ou `./foo` corretamente
✓ Sem imports circulares (auth/sla não importam inbox)
✓ Comments inline preservados (replace só no string interno)
✓ BOM/CRLF tratados pelo Node
✓ index.ts implícito resolvido pelo TS path mapping
✓ Build não quebrou — tsconfig path mapping continua funcionando
✓ Typecheck sem regressão
✓ Sem sessão paralela (verificado via git reflog)
✓ Barrels já existiam, useUserRole/useSLAAlerts já re-exportados
✓ Eslint --fix NÃO usado (só explicit replace, sem side effects)

## Pós-Onda 5

Próximo do roadmap pré-deploy:
- PR #108 (preserve/faxina) — decidir mergear ou fechar
- 8 dependabots — aplicar recomendação A (fechar com TODO pós-deploy)
- Fase B10 — patch 9 vulns npm
- Fase B5 — ENV_SETUP doc
- Fase C — Dockerfile + deploy zapp.atomicabr.com.br
Copilot AI review requested due to automatic review settings May 9, 2026 12:17
@vercel
Copy link
Copy Markdown

vercel Bot commented May 9, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
zapp-web Ready Ready Preview, Comment May 9, 2026 0:18am

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 9, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 543bbd19-410b-4a6a-a9ac-e657e6f583b7

📥 Commits

Reviewing files that changed from the base of the PR and between c734349 and 6170ded.

📒 Files selected for processing (45)
  • .gitignore
  • src/features/admin/hooks/useAgents.ts
  • src/features/admin/services/agentService.ts
  • src/features/auth/components/AuthProvider.tsx
  • src/features/auth/components/ProtectedRoute.tsx
  • src/features/auth/context/AuthContext.ts
  • src/features/auth/hooks/useAuth.ts
  • src/features/connections/hooks/useConnectionsManager.ts
  • src/features/connections/services/whatsappConnectionService.ts
  • src/features/inbox/components/ChatPanel.tsx
  • src/features/inbox/components/MessageReactions.tsx
  • src/features/inbox/components/MessageTemplates.tsx
  • src/features/inbox/components/RealtimeInboxView.tsx
  • src/features/inbox/components/TemplatesWithVariables.tsx
  • src/features/inbox/components/chat/ChatHeader.tsx
  • src/features/inbox/components/chat/ChatInputArea.tsx
  • src/features/inbox/components/chat/ChatInputToolbars.tsx
  • src/features/inbox/components/chat/ChatMessageBubble.tsx
  • src/features/inbox/components/chat/ChatMessageInput.tsx
  • src/features/inbox/components/chat/ChatMessagesArea.tsx
  • src/features/inbox/components/chat/ChatPanelHeader.tsx
  • src/features/inbox/components/chat/ChatToolPanels.tsx
  • src/features/inbox/components/chat/InputExtraTools.tsx
  • src/features/inbox/components/chat/InputPreviewBars.tsx
  • src/features/inbox/components/chat/MessageBubble.tsx
  • src/features/inbox/components/chat/MessageHoverToolbar.tsx
  • src/features/inbox/components/chat/useChatInputLogic.ts
  • src/features/inbox/components/chat/useChatPanelHandlers.ts
  • src/features/inbox/components/contact-details/ContactAccordionSections.tsx
  • src/features/inbox/components/contact-details/ContactActionButtons.tsx
  • src/features/inbox/components/contact-details/ContactHeaderSection.tsx
  • src/features/inbox/components/conversation-list/ConversationItem.tsx
  • src/features/inbox/components/conversation-list/__mocks__/mockConversations.ts
  • src/features/inbox/components/monitoring/QueueMetricsDashboard.tsx
  • src/features/inbox/components/search/GlobalSearchFilters.tsx
  • src/features/inbox/components/search/GlobalSearchResults.tsx
  • src/features/inbox/components/templates/TemplateEditorDialog.tsx
  • src/features/inbox/components/virtualized/index.ts
  • src/features/inbox/hooks/realtime/useMessageUpdateBatcher.ts
  • src/features/inbox/hooks/realtime/useRealtimeNotifications.ts
  • src/features/inbox/hooks/useMessages.ts
  • src/features/inbox/hooks/useWhatsAppStatus.ts
  • src/features/inbox/services/messageService.ts
  • src/features/inbox/services/whatsappStatusService.ts
  • src/features/sla/components/SLAHistoryDashboard.tsx

Walkthrough

Este PR refatora sistematicamente importações em 49 arquivos, convertendo caminhos alias absolutos (@/features/...) para caminhos relativos (../...). Inclui uma entrada .gitignore para artefato gerado. Nenhuma lógica de runtime, comportamento de componente ou API exportada foi alterada.

Changes

Refatoração de Importações: Aliases Absolutos para Caminhos Relativos

Layer / File(s) Summary
Configuração
.gitignore
Ignora design-system-audit.md gerado por scripts/check-design-system.ts --ci.
Camada de Serviços
src/features/admin/services/agentService.ts, src/features/inbox/services/*, src/features/connections/services/*
Serviços importam repositórios via caminhos relativos (../data-access/) em vez de aliases. Implementação mantida.
Contexto de Autenticação
src/features/auth/context/AuthContext.ts, src/features/auth/components/AuthProvider.tsx, src/features/auth/components/ProtectedRoute.tsx
Context e provider importam authService via caminhos relativos. Lógica de autenticação e permissões inalterada.
Hooks e Consumidores
src/features/*/hooks/*
useAuth, useAgents, useConnectionsManager, useMessages, useWhatsAppStatus e realtime hooks importam serviços via caminhos relativos. Assinaturas e comportamento preservados.
Componentes Reutilizáveis
src/features/inbox/components/MessageReactions.tsx, src/features/inbox/components/MessageTemplates.tsx, src/features/inbox/components/TemplatesWithVariables.tsx, src/features/inbox/components/RealtimeInboxView.tsx
Componentes compartilhados importam hooks via caminhos relativos. Props e renderização intactas.
Componentes de Chat
src/features/inbox/components/chat/*, src/features/inbox/components/chat/useChatInputLogic.ts, src/features/inbox/components/chat/useChatPanelHandlers.ts
Chat panel, header, input, message display, e toolbars importam componentes internos e hooks via caminhos relativos. Toda interação e lógica preservada.
Detalhes de Contato e Conversa
src/features/inbox/components/contact-details/*, src/features/inbox/components/conversation-list/*, src/features/inbox/components/conversation-list/__mocks__/mockConversations.ts
Painéis de contato e items de conversa importam componentes via caminhos relativos. Estrutura de dados e comportamento inalterados.
Busca, Monitoramento e SLA
src/features/inbox/components/search/*, src/features/inbox/components/monitoring/QueueMetricsDashboard.tsx, src/features/sla/components/SLAHistoryDashboard.tsx
Componentes de busca, métricas e SLA importam hooks e tipos via caminhos relativos. Filtragem e renderização preservadas.
Exportações e Mocks
src/features/inbox/components/virtualized/index.ts, src/features/inbox/components/templates/TemplateEditorDialog.tsx
Barrel exports e template editor importam via caminhos relativos. Nomes e tipos exportados mantêm-se iguais.

Estimated code review effort

🎯 2 (Simples) | ⏱️ ~8 minutos

Possibly related PRs

  • adm01-debug/zapp-web#109: Modifica o mesmo arquivo (src/features/connections/hooks/useConnectionsManager.ts); essa PR muda caminhos de importação enquanto a PR #109 ajusta tratamento de erros no mesmo arquivo.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 25.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed O título refere-se especificamente ao refactor de imports DDD (Onda 5, PR 5.3) com conversão de imports alias para relativos, que corresponde exatamente ao escopo das 44 mudanças relatadas.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/onda-5-pr-5.3-no-restricted-imports-refactor

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Este PR conclui a “Onda 5” eliminando erros de ESLint relacionados à regra no-restricted-imports, alinhando os imports ao boundary DDD do monorepo (evitando deep imports via alias dentro da própria feature e usando entry points para cross-feature).

Changes:

  • Refatoração mecânica de imports intra-feature (ex.: @/features/inbox/... → caminhos relativos) em diversos módulos de inbox, auth, connections, admin e sla.
  • Ajuste de imports cross-feature para usar barrel entry points (ex.: @/features/auth, @/features/sla) em vez de paths internos.
  • Inclusão de design-system-audit.md no .gitignore (arquivo gerado por script de auditoria de design system).

Reviewed changes

Copilot reviewed 44 out of 45 changed files in this pull request and generated no comments.

Show a summary per file
File Description
src/features/sla/components/SLAHistoryDashboard.tsx Troca import intra-feature de hooks para caminho relativo (../hooks).
src/features/inbox/services/whatsappStatusService.ts Troca import intra-feature para caminho relativo (../data-access/...).
src/features/inbox/services/messageService.ts Ajusta imports intra-feature para relativos (repo + type import de realtime).
src/features/inbox/hooks/useWhatsAppStatus.ts Ajusta imports intra-feature para relativos (service + types).
src/features/inbox/hooks/useMessages.ts Ajusta imports intra-feature para relativos (service/repo + type).
src/features/inbox/hooks/realtime/useRealtimeNotifications.ts Ajusta type import para path relativo ao módulo de realtime.
src/features/inbox/hooks/realtime/useMessageUpdateBatcher.ts Ajusta type import para path relativo ao módulo de realtime.
src/features/inbox/components/virtualized/index.ts Ajusta exports do barrel para paths relativos.
src/features/inbox/components/TemplatesWithVariables.tsx Ajusta import do hook de templates para path relativo.
src/features/inbox/components/templates/TemplateEditorDialog.tsx Ajusta imports (template-utils + type Template) para paths relativos.
src/features/inbox/components/search/GlobalSearchResults.tsx Ajusta type import (SearchResult) para path relativo.
src/features/inbox/components/search/GlobalSearchFilters.tsx Ajusta type imports de filtros para path relativo.
src/features/inbox/components/RealtimeInboxView.tsx Usa entry point @/features/sla para useSLAAlerts (cross-feature).
src/features/inbox/components/monitoring/QueueMetricsDashboard.tsx Ajusta import de QueueMetrics para path relativo.
src/features/inbox/components/MessageTemplates.tsx Ajusta import do hook de templates para path relativo.
src/features/inbox/components/MessageReactions.tsx Ajusta imports de hooks intra-feature para paths relativos.
src/features/inbox/components/conversation-list/ConversationItem.tsx Ajusta imports de componentes intra-feature para paths relativos.
src/features/inbox/components/conversation-list/mocks/mockConversations.ts Ajusta type import para path relativo (mocks dentro da feature).
src/features/inbox/components/contact-details/ContactHeaderSection.tsx Ajusta import de componente intra-feature para path relativo.
src/features/inbox/components/contact-details/ContactActionButtons.tsx Ajusta import de componente intra-feature para path relativo.
src/features/inbox/components/contact-details/ContactAccordionSections.tsx Ajusta imports de múltiplos componentes intra-feature para paths relativos.
src/features/inbox/components/ChatPanel.tsx Ajusta imports de hooks inbox para relativos e useUserRole via entry point @/features/auth.
src/features/inbox/components/chat/useChatPanelHandlers.ts Ajusta import de componente intra-feature para path relativo.
src/features/inbox/components/chat/useChatInputLogic.ts Ajusta import de FileUploaderRef para path relativo.
src/features/inbox/components/chat/MessageHoverToolbar.tsx Ajusta import de componente intra-feature para path relativo.
src/features/inbox/components/chat/MessageBubble.tsx Ajusta imports de múltiplos componentes intra-feature para paths relativos.
src/features/inbox/components/chat/InputPreviewBars.tsx Ajusta import de componente intra-feature para path relativo.
src/features/inbox/components/chat/InputExtraTools.tsx Ajusta imports de componentes intra-feature para paths relativos.
src/features/inbox/components/chat/ChatToolPanels.tsx Ajusta imports de ai-tools intra-feature para paths relativos.
src/features/inbox/components/chat/ChatPanelHeader.tsx Ajusta imports de componentes intra-feature para paths relativos.
src/features/inbox/components/chat/ChatMessagesArea.tsx Ajusta import de componente intra-feature para path relativo.
src/features/inbox/components/chat/ChatMessageInput.tsx Ajusta imports de componentes intra-feature para paths relativos.
src/features/inbox/components/chat/ChatMessageBubble.tsx Ajusta imports de componentes intra-feature para paths relativos.
src/features/inbox/components/chat/ChatInputToolbars.tsx Ajusta imports de componentes intra-feature para paths relativos.
src/features/inbox/components/chat/ChatInputArea.tsx Ajusta imports de componentes intra-feature para paths relativos.
src/features/inbox/components/chat/ChatHeader.tsx Ajusta imports de componentes intra-feature para paths relativos.
src/features/connections/services/whatsappConnectionService.ts Ajusta import intra-feature para path relativo.
src/features/connections/hooks/useConnectionsManager.ts Ajusta imports intra-feature (repo/service) para paths relativos.
src/features/auth/hooks/useAuth.ts Ajusta import do contexto para path relativo.
src/features/auth/context/AuthContext.ts Ajusta import de Profile para path relativo.
src/features/auth/components/ProtectedRoute.tsx Ajusta imports de hooks auth para paths relativos.
src/features/auth/components/AuthProvider.tsx Ajusta imports (service/context) para paths relativos.
src/features/admin/services/agentService.ts Ajusta import do repo para path relativo.
src/features/admin/hooks/useAgents.ts Ajusta imports de service/repo types para paths relativos.
.gitignore Ignora design-system-audit.md gerado pelo script de auditoria.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@adm01-debug adm01-debug merged commit 42cef5c into main May 9, 2026
14 of 15 checks passed
@adm01-debug adm01-debug deleted the chore/onda-5-pr-5.3-no-restricted-imports-refactor branch May 9, 2026 12:31
adm01-debug added a commit that referenced this pull request May 9, 2026
…09) (#113)

Documenta o estado FINAL após:
- Onda 5 completa (164 → 0 errors em 4 PRs: #109, #110, #111, #112)
- 8 dependabots resolvidos (3 mergeados, 5 fechados, 1 preservation closed)

Estado atual:
- HEAD main: f1b3eab
- ESLint: 0 errors, 1330 warnings
- Branches remotas: 2 (main + preserve)
- PRs OPEN: 0

Conteúdo do handoff (718 linhas):
- TL;DR + estado atual com métricas
- Quem é Joaquim e workflow
- Histórico cronológico de TODOS os PRs (Schemas, Faxina pré-Onda, Ondas 1, 2, 5)
- Faxina de branches (491 → 2)
- Resolução técnica dos 8 dependabots
- Decisões técnicas-chave (React 18, Vite reject, Sentry accept, etc)
- 20 lições aprendidas
- Catálogo de notes em /workspace/notes/
- Pendências pré-deploy (Backup Supabase, RabbitMQ 69GB, Drift, Deploy VPS, FX-DEP-02)
- Backlogs de review skipped
- Como retomar (instruções pra próximo Claude)
- Apêndices: comandos úteis, infra VPS, Vercel, workflow

Este doc serve como ponto de retomada pra próxima sessão Claude
sem perder contexto.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants