testes/Modulos Angular/scripts/FIXES_DOMAIN_GENERATION.md

9.2 KiB

🔧 CORREÇÕES PARA GERAÇÃO AUTOMÁTICA DE DOMÍNIOS

📋 PROBLEMAS IDENTIFICADOS E SOLUÇÕES

ERRO 1: HTML Template Incorreto

Problema: O HTML gerado não segue o padrão do drivers.component.html

Template Atual (Incorreto):

<app-tab-system></app-tab-system>

Template Correto (Baseado em drivers.component.html):

<div class="domain-container">
  <div class="main-content">
    <app-tab-system
      #tabSystem
      [config]="tabConfig"
      [events]="tabEvents"
      [showDebugInfo]="false"
      (tabSelected)="onTabSelected($event)"
      (tabClosed)="onTabClosed($event)"
      (tabAdded)="onTabAdded($event)"
      (tableEvent)="onTableEvent($event)">
    </app-tab-system>
  </div>
</div>

Correção no arquivo: scripts/create-domain.js → função generateTemplate()


ERRO 2: SideCard Não Sendo Criado

Problema: Mesmo informando que quer sideCard, a configuração não é gerada corretamente.

Configuração Atual (Incompleta):

sideCard: {
  enabled: true,
  title: "Resumo do ${componentName}",
  position: "right",
  width: "400px",
  component: "summary",
  data: {
    displayFields: [...],
    statusField: "status"
  }
}

Configuração Correta (Completa):

sideCard: {
  enabled: true,
  title: "Resumo do ${componentName}",
  position: "right",
  width: "400px",
  component: "summary",
  data: {
    imageField: "photoIds",
    displayFields: [
      {
        key: "name",
        label: "Nome",
        type: "text"
      },
      ${domainConfig.hasStatus ? `{
        key: "status",
        label: "Status", 
        type: "status"
      },` : ''}
      {
        key: "created_at",
        label: "Criado em",
        type: "date"
      }
    ],
    statusField: "status",
    statusConfig: {
      "active": {
        label: "Ativo",
        color: "#d4edda",
        textColor: "#155724",
        icon: "fa-check-circle"
      },
      "inactive": {
        label: "Inativo", 
        color: "#f8d7da",
        textColor: "#721c24",
        icon: "fa-times-circle"
      }
    }
  }
}

ERRO 3: Múltiplas Sub-abas Não Solicitadas

Problema: Mesmo informando apenas "photos", são criadas múltiplas sub-abas.

Código Atual (Incorreto):

subTabs: ['dados'${domainConfig.hasPhotos ? ", 'photos'" : ''}],

Correção Necessária:

subTabs: ['dados'${domainConfig.hasPhotos ? ", 'photos'" : ''}],

Problema na configuração de sub-abas:

  • O script sempre cria a sub-aba "dados"
  • Adiciona "photos" se solicitado
  • NÃO deve criar outras sub-abas automaticamente

ERRO 4: Estrutura de Campos Incorreta

Problema: Campos são criados na estrutura antiga em vez de dentro da sub-aba "dados".

Estrutura Atual (Incorreta):

getFormConfig(): TabFormConfig {
  return {
    title: 'Dados do ${componentName}',
    entityType: '${domainConfig.name}',
    fields: [ // ❌ ERRO: Campos aqui em vez de dentro da sub-aba
      {
        key: 'name',
        label: 'Nome',
        type: 'text',
        required: true
      }
    ],
    subTabs: [...]
  };
}

Estrutura Correta:

getFormConfig(): TabFormConfig {
  return {
    title: 'Dados do ${componentName}',
    entityType: '${domainConfig.name}',
    fields: [],
    submitLabel: 'Salvar ${componentName}',
    showCancelButton: true,
    subTabs: [
      {
        id: 'dados',
        label: 'Dados Básicos',
        icon: 'fa-info-circle',
        enabled: true,
        order: 1,
        templateType: 'fields',
        requiredFields: ['name'],
        fields: [
          {
            key: 'name',
            label: 'Nome',
            type: 'text',
            required: true,
            placeholder: 'Digite o nome'
          }
        ]
      }
    ]
  };
}

ERRO 5: Campos de API Swagger Não Documentados

Problema: Script cria campos que não estão na documentação Swagger.

Campos Gerados Automaticamente (Problemático):

// ❌ Estes campos são criados sempre, mas podem não existir na API
{
  key: 'status',
  label: 'Status',
  type: 'select'
},
{
  key: 'created_at', 
  label: 'Criado em',
  type: 'date'
}

Solução:

  1. Perguntar explicitamente quais campos existem na API
  2. Consultar documentação Swagger antes de gerar
  3. Criar apenas campos confirmados pela documentação
  4. Adicionar comentário para campos opcionais

ERRO 6: Service com HttpClient Direto

Problema: Service gerado com HttpClient e BaseDomainService (padrão antigo)

Solução: Service usando ApiClientService e implementando DomainService<T>


7. Templates Inline vs Arquivos Separados CORRIGIDO

Problema: Possibilidade de usar templates e styles inline (padrão para apps simples) Solução: SEMPRE usar arquivos separados para HTML e SCSS (padrão ERP SaaS)


🎯 PADRÃO ERP SAAS - ARQUIVOS SEPARADOS

🏢 Por que Arquivos Separados para ERP SaaS?

Templates Inline (Não adequado para ERP):

@Component({
  template: `<div>HTML inline</div>`, // ❌ Ruim para ERP complexo
  styles: [`div { color: blue; }`]     // ❌ Difícil manutenção
})

Arquivos Separados (Padrão ERP SaaS):

@Component({
  templateUrl: './example.component.html', // ✅ Arquivo separado
  styleUrl: './example.component.scss'     // ✅ SCSS com recursos avançados
})

📁 Estrutura Gerada Correta:

domain/[nome]/
├── [nome].component.ts       # ✅ TypeScript com templateUrl/styleUrl
├── [nome].component.html     # ✅ HTML dedicado e estruturado
├── [nome].component.scss     # ✅ SCSS com variáveis, mixins, responsivo
├── [nome].service.ts         # ✅ Service com ApiClientService
├── [nome].interface.ts       # ✅ Interface TypeScript forte
└── README.md                 # ✅ Documentação específica

🎨 SCSS Avançado para ERP:

// CSS Variables para temas
:host {
  --primary-color: #007bff;
  --success-color: #28a745;
}

// Responsividade para dispositivos ERP
@media (max-width: 768px) {
  .domain-container {
    padding: 0.5rem;
  }
}

// Status badges profissionais
.status-badge {
  &.status-active::before {
    content: '●';
    color: #28a745;
  }
}

// Print styles para relatórios
@media print {
  .domain-container {
    background: white !important;
  }
}

📱 Template HTML Estruturado:

<div class="domain-container">
  <div class="main-content">
    <app-tab-system
      #tabSystem
      [config]="tabConfig"
      [events]="tabEvents"
      (tableEvent)="onTableEvent($event)">
    </app-tab-system>
  </div>
</div>

🎯 Benefícios para ERP SaaS:

Manutenibilidade:

  • HTML: Estrutura clara e organizlada
  • SCSS: Variáveis, mixins, aninhamento
  • Separação: Responsabilidades bem definidas
  • Debugging: Mais fácil localizar problemas

Escalabilidade:

  • Reutilização: Styles compartilhados entre componentes
  • Temas: CSS Variables para múltiplos temas
  • Responsividade: Media queries organizadas
  • Performance: Lazy loading de estilos

Colaboração em Equipe:

  • Front-end: Desenvolvedores focam no HTML/CSS
  • Back-end: Desenvolvedores focam no TypeScript
  • Designers: Podem trabalhar diretamente no SCSS
  • Code Review: Mais fácil revisar mudanças específicas

Funcionalidades ERP:

  • Print Styles: Relatórios e documentos
  • Responsividade: Tablets e mobile para campo
  • Acessibilidade: WCAG compliance
  • Temas: Light/Dark mode corporativo

🎯 CHECKLIST DE VALIDAÇÃO

Antes da Geração

  • Template HTML segue padrão do drivers.component.html
  • SideCard tem configuração completa com statusConfig
  • Sub-abas criadas apenas as solicitadas
  • Campos dentro das sub-abas, não no fields principal
  • Campos baseados na documentação Swagger

Após a Geração

  • HTML renderiza corretamente
  • SideCard aparece ao clicar em registros
  • Apenas sub-abas solicitadas estão presentes
  • Campos aparecem na sub-aba "dados"
  • Não há campos inexistentes na API

Testes de Funcionalidade

  • Tabela carrega dados
  • Botão editar abre formulário
  • SideCard exibe informações
  • Formulário salva corretamente
  • Componentes especializados funcionam

📝 DOCUMENTAÇÃO ATUALIZADA

Atualizar ONBOARDING_NEW_DOMAIN.md

  • Adicionar seção sobre consulta à documentação Swagger
  • Explicar estrutura correta de campos em sub-abas
  • Documentar configuração completa do SideCard
  • Adicionar checklist de validação pós-geração

Atualizar scripts/README.md

  • Documentar correções implementadas
  • Adicionar troubleshooting para problemas comuns
  • Incluir exemplos de uso correto

🚀 PRÓXIMOS PASSOS

  1. Implementar correções no scripts/create-domain.js
  2. Testar geração com um domínio simples
  3. Validar funcionalidades geradas
  4. Atualizar documentação com correções
  5. Criar guia de troubleshooting