Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,7 @@ venv/
# SQLite
*.db
instance/
code-smells-project/.claude/settings.json

# FUSE transient artifacts
.fuse_hidden*
693 changes: 309 additions & 384 deletions README.md

Large diffs are not rendered by default.

89 changes: 89 additions & 0 deletions code-smells-project/.claude/skills/refactor-arch/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# refactor-arch Skill

Esta skill automatiza a análise, auditoria e refatoração de projetos legados para o padrão MVC.

## Objetivo
- Detectar linguagem, framework, arquitetura e domínio do projeto.
- Identificar anti-patterns e code smells com severidade e localização exata.
- Gerar um relatório de auditoria estruturado.
- Refatorar o projeto para uma arquitetura MVC clara.
- Validar que a aplicação inicia e mantém os endpoints originais.

## Como usar
1. Execute a skill no diretório do projeto.
2. A skill faz 3 fases sequenciais.
3. A Fase 2 pausa para confirmação antes de qualquer modificação.
4. A Fase 3 aplica refatorações e validações.

## Fase 1 — Análise
1. Identifique a linguagem principal do projeto.
2. Detecte framework e bibliotecas principais.
3. Liste todos os arquivos de código fonte relevantes.
4. Mapeie a arquitetura atual: monolito, camadas parciais, modelo MVC, etc.
5. Detecte banco de dados e método de persistência.
6. Produza um resumo com:
- Language
- Framework
- Dependencies
- Domain
- Architecture
- Source files analyzed
- DB tables/entities

Use `project-analysis-guidelines.md` para as heurísticas de identificação.

## Fase 2 — Auditoria
1. Use `antipattern-catalog.md` para detectar anti-patterns, vulnerabilidades e APIs deprecated.
2. Gere um relatório seguindo o template em `audit-report-template.md`.
3. O relatório deve conter:
- Summary por severidade
- Findings com:
- severidade
- arquivo e linhas exatas
- descrição
- impacto
- recomendação
4. Ordene findings de CRITICAL para LOW.
5. Inclua pelo menos 5 findings, com ao menos 1 HIGH ou CRITICAL.
6. Pare e peça confirmação antes de executar a Fase 3.

A resposta da Fase 2 deve terminar com:

> Phase 2 complete. Proceed with refactoring (Phase 3)? [y/n]

## Fase 3 — Refatoração
1. Use `mvc-guidelines.md` como base para reestruturar o projeto.
2. Use `refactor-playbook.md` para aplicar transformações concretas por anti-pattern.
3. Gere uma nova estrutura consistente com:
- config/settings
- models/
- controllers/
- views/routes/
- middlewares/ (tratamento de erros, validação)
- entrypoint claro (app.js, server.js, main.py)
4. Extraia configurações hardcoded para arquivos de config.
5. Separe responsabilidades:
- Models: abstração de dados e persistência
- Controllers: fluxo de aplicação e orquestração
- Routes: expor endpoints e delegar ao controller
- Middlewares: validação, erros e segurança
6. Remova endpoints inseguros ou debug/backdoor quando não fizerem parte do domínio da API.
7. Substitua SQL construído por concatenação por queries parametrizadas ou ORM.
8. Remova APIs deprecated e recomende equivalentes modernos.

## Validação
1. A aplicação deve bootar sem erros.
2. Verifique pelo menos um endpoint original.
3. Confirme a estrutura de diretórios e a ausência de anti-patterns críticos.
4. A skill deve descrever as mudanças realizadas e os arquivos alterados.

## Regras Gerais
- Seja agnóstico de tecnologia. A skill deve funcionar para Python/Flask e Node.js/Express.
- Não modifique nada antes da confirmação da Fase 2.
- Use os arquivos de referência para todas as decisões.
- Priorize segurança, separação de responsabilidades e manutenção.
- Se não for possível validar a aplicação completamente, explique claramente o motivo no final.

## Regra de Ouro (Fase 3 vs Fase 2)
- **TODA** falha ou vulnerabilidade apontada no relatório da Fase 2, incluindo achados em scripts de mock, seeds ou tokens falsos (Fake JWT), **DEVE** ser ativamente corrigida no código durante a Fase 3.
- Não deixe pendências descritas no relatório vazarem para o código final. Verifique duplamente: senhas no banco (seeds inclusive) e tokens (devem ser JWTs assinados de verdade, não placeholders).
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# Antipattern Catalog

## Objetivo
Catalogar anti-patterns, vulnerabilidades e sinais de APIs deprecated com severidade, para uso na Fase 2 de auditoria.

### CRITICAL
- **God Class / God Module**
- Sinais: arquivo único contém rotas, lógica de negócio, acesso a dados e validação.
- Impacto: impossível testar isoladamente, altíssimo acoplamento.

- **Hardcoded Secrets**
- Sinais: `SECRET_KEY`, senhas, chaves API, credenciais ou informações sensíveis em código.
- Impacto: vazamento de segredos, ambiente inseguro.

- **SQL Injection / Concatenation SQL**
- Sinais: queries construídas com concatenação de strings, interpolação direta de inputs.
- Impacto: execução de SQL arbitrário.

- **Backdoor / Unsafe Admin Query**
- Sinais: endpoints que executam SQL arbitrário ou resetam DB sem autenticação.
- Impacto: falha de segurança grave.

### HIGH
- **Business Logic in Controller/Route**
- Sinais: cálculos, regras de domínio e validações pesadas dentro de rotas ou controllers.
- Impacto: dificulta testes e manutenção.

- **Global Mutable State**
- Sinais: caches globais, variáveis de configuração mutáveis ou singletons mal definidos.
- Impacto: comportamento imprevisível em runtime.

- **Deprecated / Vulnerable API Usage**
- Sinais: uso de métodos antigos, `badCrypto`, `fs.existsSync` sem tratamento, `require.extensions`, ou APIs sem suporte.
- Impacto: risco de quebra futura e segurança reduzida.

### MEDIUM
- **N+1 Query**
- Sinais: loops que fazem consultas por item, `for`/`foreach` que executam consultas SQL ou ORM repetidas.
- Impacto: degradação de performance.

- **Mixed Responsibilities**
- Sinais: rotas que também atualizam modelos, manipulam respostas e fazem persistência direta.
- Impacto: acoplamento e duplicação.

- **Lack of Validation / Missing Input Checks**
- Sinais: parâmetros usados sem validação adequada.
- Impacto: erros, comportamento inesperado e possíveis vulnerabilidades.

### LOW
- **Magic Values / Poor Naming**
- Sinais: strings não documentadas, variáveis sem significado, números mágicos.
- Impacto: legibilidade reduzida.

- **Duplicate Code**
- Sinais: blocos repetidos de validação ou mapeamento.
- Impacto: manutenção dificultada.

- **Implicit Configuration**
- Sinais: configurações definidas diretamente no código (porta, URI, debug).
- Impacto: dificuldade de mudar ambiente.

## Deprecated API Examples
- Node.js `badCrypto` custom hashing → use `bcrypt` ou `crypto.pbkdf2`.
- Express: `app.use(bodyParser.json())` / `body-parser` → use `express.json()`.
- Flask: `app.config['DEBUG'] = True` em produção / `Flask` debug no código → use ambiente e `FLASK_ENV`.
- SQLite string concatenation → use query parametrizada ou ORM.

## Como usar
- Compare padrões do código com os sinais acima.
- Para cada finding, inclua severidade e recomendação de correção.
- Se não houver sinal exato, use julgamento conservador baseado em acoplamento e risco.
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Audit Report Template

Use este template para gerar os relatórios da Fase 2.

---
ARCHITECTURE AUDIT REPORT
---
Project: {{project_name}}
Stack: {{language}} + {{framework}}
Files: {{file_count}} analyzed | {{line_count}} lines approx.

## Summary
CRITICAL: {{critical_count}} | HIGH: {{high_count}} | MEDIUM: {{medium_count}} | LOW: {{low_count}}

## Findings

{{#each findings}}
### [{{severity}}] {{title}}
File: {{file}}:{{line_start}}-{{line_end}}
Description: {{description}}
Impact: {{impact}}
Recommendation: {{recommendation}}

{{/each}}
---
Total: {{total_findings}} findings
---

Notes:
- Ordene findings por severidade decrescente.
- Use linhas exatas quando possível.
- Inclua pelo menos um finding por severidade sempre que aplicável.
- Se o projeto usa APIs deprecated, destaque isso como parte da auditoria.
65 changes: 65 additions & 0 deletions code-smells-project/.claude/skills/refactor-arch/mvc-guidelines.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# MVC Guidelines

## Objetivo
Definir regras claras para refatorar qualquer projeto legado para uma arquitetura MVC sustentável.

## Camadas MVC
### Models
Responsabilidades:
- Abstrair acesso a dados e persistência.
- Definir entidades e mapeamento de dados.
- Validar regras de integridade de dados de baixo nível.

Exemplos:
- Python: classes ou funções em `models/` que executam queries parametrizadas ou usam ORM.
- Node.js: objetos/repositórios que encapsulam `db.query` e retornam dados.

### Controllers
Responsabilidades:
- Orquestrar a lógica de aplicação.
- Chamar models e serviços.
- Tratar entradas e resultados antes de enviar resposta.
- Delegar tratamento de erros para middleware.

Exemplo:
- `controllers/produto_controller.py` ou `controllers/checkoutController.js`.

### Views / Routes
Responsabilidades:
- Expor endpoints HTTP.
- Mapear rotas para controllers.
- Não conter lógica de negócios ou regras complexas.

Exemplo:
- rotas Flask com Blueprint ou `app.add_url_rule`
- `express.Router()` que importa controllers

## Configuração
- Mova segredos e URIs para `config/settings.py` ou `config/index.js`.
- Use variáveis de ambiente para valores sensíveis.
- Não deixe `SECRET_KEY`, `DB_URI`, `API_KEY` codificados.

## Middlewares e Tratamento de Erros
- Centralize captura de exceções.
- Crie middleware para validação e erros.
- Evite `try/except` ou `try/catch` espalhados que repetem mensagens.

## Regras de Refatoração
- Rotas devem ser finas: validação mínima + chamada de controller.
- Controllers devem ser responsáveis pelo fluxo, não por persistência detalhada.
- Models devem ser responsáveis pela persistência e retorno de dados em formatos simples.
- Normalizar respostas JSON / status HTTP de forma consistente.
- Evitar dependências circulares entre camadas.

## Estrutura mínima sugerida
- `config/`
- `models/`
- `controllers/`
- `routes/` ou `views/`
- `middlewares/`
- `app.py` / `server.js`

## Validação após refatoração
- A aplicação deve iniciar sem erros.
- Um endpoint representativo deve responder corretamente.
- O projeto deve estar mais modular e com responsabilidade separada.
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# Project Analysis Guidelines

## Objetivo
Fornecer regras e heurísticas para detectar linguagem, framework, banco de dados e arquitetura de um projeto legado.

## Linguagem e Framework
### Python
- Detecte `import flask`, `from flask import`, `Flask(__name__)` → Flask.
- Detecte `from flask_sqlalchemy import SQLAlchemy` → Flask + SQLAlchemy.
- Detecte `app.add_url_rule`, `@app.route`, `Blueprint`.
- Detecte `requirements.txt` ou `setup.py` com `Flask`, `flask-cors`, `sqlalchemy`.

### JavaScript / Node.js
- Detecte `require('express')`, `import express from 'express'`, `app.use(express.json())` → Express.
- Detecte `app.listen`, `express.Router()`, `module.exports =`.
- Detecte `package.json` com dependências `express`, `sqlite3`, `body-parser`.

## Banco de Dados
- Detecte arquivos `database.py`, `sqlite3.connect`, `sqlite3.Database`, `SQLAlchemy`, `pg`, `mysql`, `mongoose`.
- Identifique a persistência via queries SQL ou ORM.
- Liste tabelas se conseguir extrair `CREATE TABLE` ou `db.run`/`cursor.execute`.

## Arquitetura Atual
### Monolítico
- Todos os endpoints e lógica em um único arquivo.
- Models de dados, validação e rotas misturados.

### Parcialmente Organizado
- Existe alguma separação de `models/`, `routes/`, `services/` ou `controllers/`, mas ainda há vazamento de lógica entre camadas.

### MVC / Estrutura clara
- `models`, `controllers` e `routes/views` separados.
- `config` e `middlewares` também definidos separadamente.

## Domínio e Contexto
- Determine a área funcional principal do projeto.
- Exemplos:
- E-commerce API (produtos, pedidos, usuários)
- LMS API / checkout
- Task Manager API

## Output Esperado da Análise
- Language: Python / JavaScript
- Framework: Flask / Express
- Dependencies: principais bibliotecas detectadas
- Domain: descrição curta do domínio
- Architecture: monolítico / parcialmente organizado / MVC parcial
- Source files: lista e contagem de arquivos analisados
- DB tables: entidades ou tabelas conhecidas

## Regras de Análise
- Não altere arquivos nesta fase.
- Extraia sinais de arquitetura mesmo quando o código estiver parcialmente organizado.
- Se houver múltiplos projetos no mesmo diretório, limite-se ao projeto atual.
Loading