Dividir um roteador Express monolítico em rotas por domínio
Devin divide um roteador Express de 2.000 linhas em arquivos de rota específicos de domínio com middleware compartilhado — depois atualiza todos os imports e verifica se todos os testes continuam passando.Mostre o monólito para o Devin
Você conhece aquele arquivo — um único router do Express que foi crescendo por dezoito meses. Todo endpoint de todo domínio fica em Diga ao Devin exatamente como você quer que a estrutura desejada fique.
src/routes/index.ts: cadastro de usuário ao lado de webhooks de pagamento ao lado de busca de produto. Verificações de autenticação inline são copiadas e coladas em 40 handlers. Ninguém quer mexer nele porque uma alteração na lógica de pedidos pode quebrar os endpoints de usuário trezentas linhas acima.É mais ou menos assim que o topo do arquivo costuma ser:src/routes/index.ts (before — 2,000 lines)
Oriente o Devin com convenções
Devin lê sua codebase para inferir padrões, mas é na refatoração que as entradas de Knowledge geram mais impacto. Adicione entradas com as convenções que Devin deve seguir:
- Padrões de router — “Cada router de domínio usa
Router()e é montado comapp.use('/domain', domainRouter)na raiz” - Middleware — “O middleware de autenticação fica em
src/middleware/e é sempre importado, nunca definido inline” - Tratamento de erros — “Todos os route handlers usam nosso wrapper
asyncHandlerdesrc/lib/asyncHandler.ts— nunca try/catch direto”
src/routes/admin.ts, que já está claramente separado” ao seu prompt.Você também pode usar o Advanced Devin para gerar entradas de Knowledge para você — basta descrever suas convenções e ele criará entradas bem estruturadas que você pode revisar e salvar.Analise o PR do Devin
Devin mapeia todos os endpoints, rastreia o grafo de importações, extrai a lógica compartilhada, cria os arquivos de domínio, reconfigura o roteador raiz e executa sua suíte de testes. É assim que o PR geralmente fica:Veja como fica o roteador raiz limpo após a separação:E um arquivo de rota de domínio em que o middleware compartilhado é importado corretamente:Cada caminho de URL permanece o mesmo —
src/routes/index.ts (after — 15 lines)
src/routes/orders.ts (after — excerpt)
/orders agora é tratado pelo ordersRouter montado em /orders, de forma que os clientes e testes existentes continuam funcionando sem nenhuma alteração.(Opcional) Faça o checkout da branch e teste localmente
Para uma refatoração estrutural como esta, vale a pena puxar a branch e verificar localmente antes de fazer o merge. Abra no Windsurf ou na sua IDE preferida, inicie o app e acesse alguns endpoints para confirmar que o roteamento, o middleware e o tratamento de erros continuam se comportando exatamente como antes.Se notar algo estranho, deixe um comentário no PR — Devin vai detectar e aplicar uma correção.
