Diretrizes de Desenvolvimento com AI
6. Exemplos de Uso

6. Exemplos de Uso

Este capítulo apresenta exemplos práticos de uso correto e incorreto de vibecoding.

6.1. Casos de Uso Aprovados

6.1.1. Exemplo 1: Validação de CPF (TypeScript)

Prompt seguro:

Crie função TypeScript para validar CPF brasileiro.
- Retornar boolean
- Verificar dígitos verificadores
- Incluir testes unitários
- Aceitar formato com ou sem máscara

Código gerado e revisado:

/**
 * Valida número de CPF brasileiro
 * @generated-by Claude AI
 * @reviewed-by Maria Santos - 2026-01-20
 */
export function validateCPF(cpf: string): boolean {
    const cleanCPF = cpf.replace(/\D/g, '');
    
    if (cleanCPF.length !== 11) return false;
    if (/^(\d)\1+$/.test(cleanCPF)) return false;
    
    // Validação primeiro dígito
    let sum = 0;
    for (let i = 0; i < 9; i++) {
        sum += parseInt(cleanCPF[i]) * (10 - i);
    }
    let remainder = (sum * 10) % 11;
    if (remainder === 10) remainder = 0;
    if (remainder !== parseInt(cleanCPF[9])) return false;
    
    // Validação segundo dígito
    sum = 0;
    for (let i = 0; i < 10; i++) {
        sum += parseInt(cleanCPF[i]) * (11 - i);
    }
    remainder = (sum * 10) % 11;
    if (remainder === 10) remainder = 0;
    if (remainder !== parseInt(cleanCPF[10])) return false;
    
    return true;
}
 
// Testes
describe('validateCPF', () => {
    it('should validate valid CPF', () => {
        expect(validateCPF('123.456.789-09')).toBe(true);
    });
    
    it('should reject sequential numbers', () => {
        expect(validateCPF('111.111.111-11')).toBe(false);
    });
    
    it('should accept unmasked CPF', () => {
        expect(validateCPF('12345678909')).toBe(true);
    });
});

Aprovado: Função específica, testável, compreensível

6.1.2. Exemplo 2: Repository Pattern (Laravel)

Prompt seguro:

Criar ProductRepository em Laravel seguindo Repository Pattern.
- Métodos: findAll, findById, create, update, delete
- Paginação (15 items/page)
- Usar Eloquent ORM
- Type hints

Código gerado:

<?php
/**
 * Repository para entidade Product
 * @generated-by GitHub Copilot
 * @reviewed-by João Silva - 2026-01-20
 */
namespace App\Repositories;
 
use App\Models\Product;
use Illuminate\Pagination\LengthAwarePaginator;
 
class ProductRepository
{
    public function findAll(int $perPage = 15): LengthAwarePaginator
    {
        return Product::paginate($perPage);
    }
    
    public function findById(int $id): ?Product
    {
        return Product::find($id);
    }
    
    public function create(array $data): Product
    {
        return Product::create($data);
    }
    
    public function update(int $id, array $data): bool
    {
        $product = $this->findById($id);
        if (!$product) {
            return false;
        }
        return $product->update($data);
    }
    
    public function delete(int $id): bool
    {
        $product = $this->findById($id);
        if (!$product) {
            return false;
        }
        return $product->delete();
    }
}

Aprovado: Padrão claro, type-safe, sem lógica complexa

6.2. Cenários PROIBIDOS com Alternativas

6.2.1. Cenário Proibido 1: Sistema de Login Completo

❌ PROIBIDO:

Prompt: "Crie um sistema de autenticação completo com JWT,
incluindo login, registro, recuperação de senha e 2FA"

Problema: "Fucking code" - muito amplo e crítico

✅ ALTERNATIVA CORRETA:

Dividir em 10+ tarefas pequenas:

  1. Interface User
  2. Hash de senha com bcrypt
  3. Função de geração de JWT
  4. Função de validação de JWT
  5. Middleware de autenticação
  6. Endpoint de login (sem lógica complexa)
  7. Testes de hash
  8. Testes de JWT
  9. Testes de middleware
  10. Documentação

Cada tarefa: < 50 linhas, revisada individualmente

6.2.2. Cenário Proibido 2: Debug com Dados Reais

❌ PROIBIDO:

Prompt: "Este código está falhando ao processar pedido do cliente
João Silva (joao@empresa.com):
SELECT * FROM orders WHERE customer_email = 'joao@empresa.com'"

Problema: Expôs nome e email real de cliente

✅ ALTERNATIVA:

Prompt: "Query SQL está retornando erro de sintaxe:
SELECT * FROM orders WHERE customer_email = ?

Stack: PostgreSQL 15, Node.js
Erro: syntax error at or near '?'"

6.3. Anti-Patterns

Anti-Pattern 1: Copy-Paste sem Compreensão

Erro: Copiar código AI sem entender Consequência: Bug em produção, vulnerabilidade Correção: Estudar ANTES de usar

Anti-Pattern 2: Confiar Cegamente

Erro: Assumir que código AI está correto Consequência: SQL Injection, XSS Correção: Validar contra OWASP, testar edge cases

Anti-Pattern 3: Prompts Vagos

Erro: "Crie uma função de login" Consequência: Código genérico, inseguro Correção: Prompts específicos com requisitos claros


Mais exemplos: Ver documentação completa no repositório interno