# 🛠️ Scripts de Desenvolvimento - Sistema PraFrota

## 🚀 create-domain.js - Criador Interativo de Domínios

### 📋 Descrição
Script interativo que guia novos desenvolvedores na criação de domínios completos no sistema PraFrota. Implementa o **framework de geração automática de telas** com todas as funcionalidades necessárias.

### ✅ Pré-requisitos
- Node.js instalado
- Git configurado com email @grupopralog.com.br
- Branch main atualizada localmente

### 🎯 Funcionalidades
- ✅ **Verificação automática** de pré-requisitos
- ✅ **Questionário interativo** para configuração
- ✅ **Geração automática** de toda estrutura
- ✅ **Validação** de dados de entrada
- ✅ **Confirmação** antes da criação

### 🔧 Como Usar

#### 1. Preparação
```bash
# Atualizar branch main
git checkout main
git pull origin main

# Configurar Git (se necessário)
git config --global user.name "Seu Nome"
git config --global user.email "seu.email@grupopralog.com.br"
```

#### 2. Executar Script
```bash
# Executar o criador de domínios
node scripts/create-domain.js
```

#### 3. Seguir o Questionário
O script fará perguntas sobre:
- 📝 Nome do domínio
- 🧭 Posição no menu lateral
- 📸 Sub-aba de fotos
- 🃏 Side card
- 🎨 Componentes especializados
- 🔗 Campos remote-select

### 📁 Estrutura Gerada

```
domain/[nome-do-dominio]/
├── [nome].component.ts       # Componente principal
├── [nome].component.html     # Template HTML
├── [nome].component.scss     # Estilos CSS
├── [nome].service.ts         # Service para API
├── [nome].interface.ts       # Interface TypeScript
└── README.md                 # Documentação específica
```

### 🎨 Componentes Incluídos Automaticamente

#### **Básicos**
- ✅ BaseDomainComponent (herança)
- ✅ Registry Pattern (auto-registro)
- ✅ Data Table (listagem)
- ✅ Tab System (formulários)
- ✅ Validação (campos obrigatórios)

#### **Especializados** (conforme seleção)
- 🛣️ kilometer-input (quilometragem)
- 🎨 color-input (seletor de cores)
- 📊 status (badges coloridos)
- 🔍 remote-select (busca em APIs)
- 📸 send-image (upload de fotos)

### 📊 Exemplo de Uso

#### **Input do Usuário:**
```
Nome do domínio: contracts
Posição no menu: finances
Sub-aba de fotos: sim
Side Card: sim
Campo quilometragem: não
Campo cor: não
Campo status: sim
Campos remote-select: sim (vehicles, drivers)
```

#### **Resultado Gerado:**
```typescript
@Component({
  selector: 'app-contracts',
  standalone: true,
  imports: [CommonModule, TabSystemComponent],
  templateUrl: './contracts.component.html',
  styleUrl: './contracts.component.scss'
})
export class ContractsComponent extends BaseDomainComponent<Contract> {
  // Configuração automática baseada nas respostas
  // Registry pattern implementado
  // Remote-selects para vehicles e drivers
  // Sub-aba de fotos configurada
  // Side card com resumo
  // Status com badges coloridos
}
```

### 🔄 Fluxo Completo

1. **Verificação** - Pré-requisitos validados
2. **Coleta** - Informações via questionário
3. **Confirmação** - Revisão da configuração
4. **Branch** - Criação automática da branch `feature/domain-[nome]`
5. **Geração** - Criação automática dos arquivos
6. **Finalização** - Estrutura pronta para uso

### 🌿 Criação Automática de Branch

#### **Funcionalidade Implementada**
- ✅ **Nome automático**: `feature/domain-[nome-dominio]`
- ✅ **Verificação**: Se branch já existe, pergunta se quer usar
- ✅ **Checkout automático**: Muda para a nova branch
- ✅ **Descrição automática**: Funcionalidades documentadas

#### **Exemplo de Saída**
```bash
🌿 CRIAÇÃO DE BRANCH
ℹ️  Criando nova branch: feature/domain-products
✅ Branch criada e ativada: feature/domain-products
📝 Descrição da branch: Implementação do domínio Produtos
🎯 Funcionalidades: CRUD básico, upload de fotos, painel lateral, campo quilometragem
```

#### **Tratamento de Branch Existente**
```bash
⚠️  Branch 'feature/domain-products' já existe
🔄 Deseja mudar para a branch existente? (s/n): s
✅ Mudado para branch existente: feature/domain-products
```

### 🚨 Validações Implementadas

#### **Git**
- Branch deve ser `main`
- Email deve ter domínio `@grupopralog.com.br`
- Nome de usuário configurado

#### **Domínio**
- Nome singular, minúsculo, sem espaços
- Não pode conflitar com domínios existentes

#### **Configuração**
- Opções válidas para menu lateral
- Componentes especializados válidos
- APIs disponíveis para remote-select

### 🎯 Vantagens

#### **Para Novos Desenvolvedores**
- 🎓 **Onboarding fluido** e guiado
- 🛡️ **Segurança** com validações
- 📚 **Aprendizado** do padrão do projeto
- ⚡ **Produtividade** imediata

#### **Para o Projeto**
- 🏗️ **Consistência** arquitetural
- 📋 **Padrões** unificados
- 🔧 **Manutenibilidade** alta
- 🚀 **Escalabilidade** infinita

### 🔧 CORREÇÕES IMPLEMENTADAS

#### **Problemas Corrigidos (Versão Atual)**
- ✅ **Template HTML** - Estrutura correta com eventos conectados
- ✅ **SideCard** - Configuração completa com statusConfig
- ✅ **Sub-abas** - Apenas as solicitadas são criadas
- ✅ **Campos** - Posicionados dentro das sub-abas (estrutura nova)
- ✅ **API Swagger** - Consulta obrigatória antes da geração
- ✅ **Validação** - Campos baseados na documentação real

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

#### **Estrutura de Campos Correta**
```typescript
getFormConfig(): TabFormConfig {
  return {
    fields: [], // ✅ VAZIO - campos nas sub-abas
    subTabs: [
      {
        id: 'dados',
        fields: [ // ✅ Campos DENTRO da sub-aba
          { key: 'name', label: 'Nome', type: 'text' }
        ]
      }
    ]
  };
}
```

### 🆘 Troubleshooting

#### **Erro: "Branch deve ser main"**
```bash
git checkout main
git pull origin main
```

#### **Erro: "Email deve ter domínio @grupopralog.com.br"**
```bash
git config --global user.email "seu.email@grupopralog.com.br"
```

#### **Erro: "Nome deve ser singular, minúsculo"**
- Use apenas letras minúsculas
- Sem espaços ou caracteres especiais
- Singular (ex: `contract`, não `contracts`)

#### **Erro: "Botão editar não funciona"**
- Verificar se template HTML tem eventos conectados
- Confirmar presença do `(tableEvent)="onTableEvent($event)"`

#### **Erro: "SideCard não aparece"**
- Verificar configuração completa do sideCard
- Confirmar presença do statusConfig

#### **Erro de compilação após criação**
```bash
# Verificar imports
npm run build

# Verificar sintaxe
ng lint
```

### 📚 Documentação Relacionada

- 📖 [Guia de Onboarding](../projects/idt_app/docs/ONBOARDING_NEW_DOMAIN.md)
- 🎯 [Padrões do Projeto](../projects/idt_app/docs/general/CURSOR.md)
- 🔧 [Configuração MCP](../.mcp/config.json)
- 🏗️ [Arquitetura](../projects/idt_app/docs/architecture/)

### 🎉 Próximos Passos

Após executar o script:

1. ✅ **Compilar** - `ng build`
2. ✅ **Testar** - `ng serve`
3. ✅ **Customizar** - Ajustar campos específicos
4. ✅ **Documentar** - Atualizar README do domínio
5. ✅ **Commit** - Salvar mudanças

---

**Criado com ❤️ para facilitar o desenvolvimento no Sistema PraFrota! 🚀** 

# 🔍 Ferramentas de Análise de Branches e PRs

> **Scripts automatizados para análise completa de branches, PRs e code review**
> 
> **Autor**: Jonas Santos  
> **Data**: Janeiro 2025  
> **Versão**: 1.0

---

## 📋 **VISÃO GERAL**

Este conjunto de ferramentas foi criado para **automatizar e padronizar** a análise de branches e Pull Requests, proporcionando uma **revisão mais eficiente e completa**.

### **🎯 Objetivos:**
- ✅ **Acelerar code reviews**
- ✅ **Padronizar análises**
- ✅ **Detectar problemas automaticamente**
- ✅ **Melhorar qualidade do código**
- ✅ **Reduzir erros em produção**

---

## 🛠️ **FERRAMENTAS DISPONÍVEIS**

### **1. 🔍 `analyze-branch.sh` - Análise Completa de Branch**

**Análise abrangente de qualquer branch com informações detalhadas para code review.**

#### **📊 O que analisa:**
- **Informações básicas**: commits, autor, data, mensagens
- **Arquivos modificados**: lista completa e estatísticas
- **Tipos de arquivo**: distribuição por extensão
- **Complexidade**: linhas adicionadas/removidas, classificação
- **Conflitos**: verificação automática de merge conflicts
- **Testes**: cobertura e arquivos de teste afetados
- **Sugestões**: checklist personalizado para revisão

#### **🚀 Como usar:**
```bash
# Análise básica
./scripts/analyze-branch.sh feature/checkbox-vehicle

# Comparar com branch específica
./scripts/analyze-branch.sh feature/new-feature -b develop

# Ver ajuda
./scripts/analyze-branch.sh --help
```

### **2. 🛠️ `pr-tools.sh` - Ferramentas Avançadas de PR**

**Análises especializadas focadas em segurança, performance e qualidade.**

#### **🔧 Comandos disponíveis:**

| Comando | Descrição | Exemplo |
|---------|-----------|---------|
| `security` | Análise de segurança | `./scripts/pr-tools.sh security feature/login` |
| `performance` | Análise de performance | `./scripts/pr-tools.sh perf feature/optimization` |
| `dependencies` | Análise de dependências | `./scripts/pr-tools.sh deps feature/upgrade` |
| `checklist` | Checklist completo de PR | `./scripts/pr-tools.sh check feature/new-api` |
| `compare` | Comparar duas branches | `./scripts/pr-tools.sh comp feature/a feature/b` |
| `commits` | Análise de mensagens | `./scripts/pr-tools.sh msg feature/refactor` |
| `full` | Análise completa | `./scripts/pr-tools.sh full feature/checkbox-vehicle` |

---

## 📈 **EXEMPLOS PRÁTICOS**

### **🎯 Cenário 1: Análise Rápida de PR**
```bash
# Análise completa de uma branch
./scripts/analyze-branch.sh feature/checkbox-vehicle

# Output: Relatório detalhado com todas as informações
```

### **🎯 Cenário 2: Verificação de Segurança**
```bash
# Verificar problemas de segurança
./scripts/pr-tools.sh security feature/user-authentication

# Detecta: senhas hardcoded, API keys expostas, URLs produção
```

### **🎯 Cenário 3: Análise de Performance**
```bash
# Verificar impacto na performance
./scripts/pr-tools.sh performance feature/data-optimization

# Detecta: loops aninhados, DOM operations, memory leaks
```

### **🎯 Cenário 4: Checklist de Revisão**
```bash
# Gerar checklist personalizado
./scripts/pr-tools.sh checklist feature/new-component

# Output: Checklist completo baseado nas mudanças detectadas
```

---

## 🔍 **DETALHAMENTO DAS ANÁLISES**

### **📊 Análise de Informações Básicas**
- ✅ **Último commit**: hash, autor, data, mensagem
- ✅ **Status da branch**: commits à frente/atrás da base
- ✅ **Alertas**: branch desatualizada, necessidade de rebase

### **📁 Análise de Arquivos**
- ✅ **Lista completa**: todos os arquivos modificados
- ✅ **Estatísticas**: linhas adicionadas/removidas por arquivo
- ✅ **Distribuição**: contagem por tipo de arquivo
- ✅ **Arquivos críticos**: configuração, dependências, segurança

### **⚡ Análise de Complexidade**
- ✅ **Total de mudanças**: linhas modificadas
- ✅ **Classificação**: BAIXA/MÉDIA/ALTA/MUITO ALTA
- ✅ **Top 5 arquivos**: com mais modificações
- ✅ **Sugestões**: baseadas na complexidade

### **🔀 Verificação de Conflitos**
- ✅ **Merge dry-run**: teste automático de conflitos
- ✅ **Arquivos conflitantes**: lista detalhada
- ✅ **Status**: merge limpo ou conflitos detectados

### **🧪 Análise de Testes**
- ✅ **Testes modificados**: arquivos .test/.spec alterados
- ✅ **Cobertura**: arquivos sem testes correspondentes
- ✅ **Alertas**: código novo sem testes

### **🔒 Análise de Segurança**
- ✅ **Credenciais hardcoded**: senhas, API keys, secrets
- ✅ **URLs de produção**: hardcoded no código
- ✅ **Console.log**: debug code em produção
- ✅ **Padrões perigosos**: regex patterns de segurança

### **⚡ Análise de Performance**
- ✅ **Loops aninhados**: estruturas custosas
- ✅ **DOM operations**: querySelector, getElementById
- ✅ **Memory leaks**: subscribe sem unsubscribe
- ✅ **Imports pesados**: import * desnecessários

### **📦 Análise de Dependências**
- ✅ **Mudanças**: package.json modificações
- ✅ **Dependências novas**: adicionadas/removidas
- ✅ **Dependências perigosas**: eval, fs, child_process
- ✅ **Compatibilidade**: verificação de versões

---

## 🎨 **OUTPUT VISUAL**

### **🌈 Cores e Emojis**
- 🟢 **Verde**: Informações positivas, tudo OK
- 🟡 **Amarelo**: Avisos, atenção necessária
- 🔴 **Vermelho**: Problemas críticos, ação imediata
- 🔵 **Azul**: Informações neutras, contexto
- 🟣 **Roxo**: Comandos, instruções

### **📋 Exemplo de Output:**
```bash
================================================================
🚀 BRANCH ANALYZER - Análise Completa de Branch/PR
================================================================

ℹ️ INFORMAÇÕES BÁSICAS
--------------------------------------------------
✅ Branch: feature/checkbox-vehicle
✅ Último commit: 220b846
✅ Autor: PraDev001
✅ Data: 23/07/2025 11:51
✅ Mensagem: feat(vehicles): implement vehicle accessories tab with checkboxes

📊 ANÁLISE DE COMPLEXIDADE
--------------------------------------------------
📊 Linhas adicionadas: +387
📊 Linhas removidas: -13
📊 Total de mudanças: 400
⚠️ Complexidade: ALTA (200-500 linhas)

🔒 ANÁLISE DE SEGURANÇA
--------------------------------------------------
🔍 Verificando padrões sensíveis...
✅ Nenhum problema crítico de segurança detectado
```

---

## 📋 **CHECKLISTS AUTOMÁTICOS**

### **🔍 Checklist de Revisão de Código**
- [ ] Código segue padrões do projeto
- [ ] Nomenclatura clara e consistente
- [ ] Lógica de negócio está correta
- [ ] Tratamento de erros adequado
- [ ] Sem código comentado/debug
- [ ] Imports organizados

### **🧪 Checklist de Testes**
- [ ] Testes unitários criados/atualizados
- [ ] Todos os testes passando
- [ ] Cobertura de código adequada
- [ ] Testes de integração (se necessário)

### **🚀 Checklist de Funcionalidade**
- [ ] Feature funciona conforme especificado
- [ ] Casos edge testados
- [ ] Responsividade verificada
- [ ] Performance adequada
- [ ] Acessibilidade considerada

### **🔒 Checklist de Segurança**
- [ ] Sem credenciais hardcoded
- [ ] Validação de inputs
- [ ] Autorização/autenticação OK
- [ ] Sem vazamentos de dados sensíveis

---

## 🔧 **CONFIGURAÇÃO E INSTALAÇÃO**

### **📋 Pré-requisitos**
- ✅ **Git** instalado e configurado
- ✅ **Bash** shell (Linux/macOS/WSL)
- ✅ **Repositório Git** inicializado

### **⚙️ Instalação**
```bash
# 1. Clonar/baixar os scripts
git clone <repo>

# 2. Tornar executáveis
chmod +x scripts/analyze-branch.sh
chmod +x scripts/pr-tools.sh

# 3. Testar
./scripts/analyze-branch.sh --help
./scripts/pr-tools.sh --help
```

### **🔗 Integração com Workflow**
```bash
# Adicionar ao .bashrc/.zshrc para uso global
export PATH="$PATH:/caminho/para/scripts"

# Criar aliases úteis
alias analyze="./scripts/analyze-branch.sh"
alias prtools="./scripts/pr-tools.sh"
```

---

## 💡 **DICAS E MELHORES PRÁTICAS**

### **🎯 Para Desenvolvedores**
1. **Execute análise antes de criar PR**
2. **Use checklist para auto-revisão**
3. **Verifique segurança em branches sensíveis**
4. **Analise performance em features críticas**

### **🎯 Para Code Reviewers**
1. **Execute análise completa primeiro**
2. **Foque nos pontos destacados pelas ferramentas**
3. **Use output como base para comentários**
4. **Verifique checklists automaticamente**

### **🎯 Para Tech Leads**
1. **Integre ao processo de CI/CD**
2. **Estabeleça thresholds de complexidade**
3. **Monitor padrões de qualidade**
4. **Use para treinamento de equipe**

---

## 🚀 **FUNCIONALIDADES AVANÇADAS**

### **🔄 Comparação de Branches**
```bash
# Comparar duas features
./scripts/pr-tools.sh compare feature/login feature/auth

# Ver diferenças entre versões
./scripts/pr-tools.sh compare v1.0 v1.1
```

### **💬 Análise de Commit Messages**
```bash
# Verificar se seguem Conventional Commits
./scripts/pr-tools.sh commits feature/new-api

# Output:
# ✅ feat(api): add user authentication
# ⚠️ fixed bug in login (não segue padrão)
```

### **📊 Relatórios Personalizados**
```bash
# Análise focada em segurança
./scripts/pr-tools.sh security feature/payment

# Análise focada em performance
./scripts/pr-tools.sh performance feature/dashboard
```

---

## 🔮 **FUTURAS MELHORIAS**

### **🎯 Em Desenvolvimento**
- [ ] **Integração com GitHub API** - comentários automáticos
- [ ] **Métricas de qualidade** - scores numéricos
- [ ] **Integração CI/CD** - Jenkins, GitHub Actions
- [ ] **Dashboard web** - visualização gráfica
- [ ] **Alertas Slack** - notificações automáticas
- [ ] **Histórico de análises** - banco de dados
- [ ] **Machine Learning** - detecção inteligente de bugs

### **🎯 Configurações Futuras**
- [ ] **Configuração por projeto** - rules customizadas
- [ ] **Thresholds configuráveis** - limits por equipe
- [ ] **Templates de checklist** - por tipo de feature
- [ ] **Integração com Jira** - sync com tasks

---

## 🆘 **TROUBLESHOOTING**

### **❓ Problemas Comuns**

#### **🔴 "Branch não encontrada"**
```bash
# Verificar se branch existe
git branch -a | grep nome-da-branch

# Fazer fetch das branches remotas
git fetch origin
```

#### **🔴 "Permission denied"**
```bash
# Dar permissão de execução
chmod +x scripts/*.sh
```

#### **🔴 "Not a git repository"**
```bash
# Verificar se está em repositório Git
git status

# Inicializar se necessário
git init
```

### **💡 Tips de Performance**
- **Use com branches pequenas** para análise mais rápida
- **Fetch regular** para manter referências atualizadas
- **Cleanup de branches** antigas para evitar confusão

---

## 📞 **SUPORTE E CONTRIBUIÇÃO**

### **🐛 Reportar Bugs**
- Criar issue no repositório
- Incluir output completo do comando
- Especificar OS e versão do Git

### **💡 Sugestões de Melhorias**
- Fork do repositório
- Implementar funcionalidade
- Criar Pull Request

### **📚 Documentação**
- Exemplos de uso no README
- Comentários no código
- Wiki com casos de uso

---

## 📄 **LICENÇA**

```
MIT License - Livre para uso, modificação e distribuição
Copyright (c) 2025 Jonas Santos
```

---

**🎉 Essas ferramentas transformaram a forma como analisamos PRs no projeto PraFrota! Use, adapte e contribua para melhorar ainda mais! 🚀** 