logo site seligadev
Cansei de Reescrever a Mesma Lógica de Query no NestJS

Cansei de Reescrever a Mesma Lógica de Query no NestJS

Jander Nery

Jander Nery

icon social media linkedinicon social media Xicon social media youtubeicon social media instagramicon social media facebookicon social media github

Você começa construindo uma API simples. (Node)

Tudo está limpo.
Tudo está bonito.


Então o product manager chega e diz:

“Precisamos de busca.”

Você adiciona busca.

Depois ele diz:

“Os usuários precisam poder filtrar os resultados.”

Você adiciona filtros.

Depois:

“Adiciona paginação.”

Depois:

“Também precisamos de ordenação.”


E de repente, aquele serviço bonito fica assim:

const { page, limit, searchTerm, sortBy, sortOrder, role } = req.query

const pageNumber = Number(page) || 1
const limitNumber = Number(limit) || 10
const skip = (pageNumber - 1) * limitNumber

const filters: any = {}

if (role) {
  filters.role = role
}

if (searchTerm) {
  filters.OR = [
    { name: { contains: searchTerm } },
    { email: { contains: searchTerm } }
  ]
}

Uma biblioteca pequena, mas poderosa, que resolve automaticamente:

  • 🔎 Busca
  • 🎯 Filtros
  • 📄 Paginação
  • ↕️ Ordenação

🎯 O objetivo é simples

Transformar parâmetros de query bagunçados em um objeto limpo e estruturado.


❌ O Problema com APIs REST tradicionais

Endpoints começam simples:

GET /users

Agora seu backend precisa:

  • Fazer parse dos parâmetros
  • Validar
  • Converter tipos
  • Montar filtros
  • Calcular paginação
  • Aplicar ordenação

👉 E todo dev acaba escrevendo as mesmas 200 linhas de código…

De novo.
E de novo.
E de novo.


⚙️ O que o Smart Query faz

Ele transforma automaticamente os parâmetros da requisição em um objeto estruturado que seu service pode usar diretamente.


✨ Exemplo

Controller

@Get()
@UseInterceptors(SmartQueryInterceptor)
async getUsers(@Req() req: Request) {
  return this.userService.findAll(req.smartQuery)
}

Tudo limpo.
Tipado.
Organizado.


📦 Funcionalidades suportadas

🔎 Busca

/users?searchTerm=john

Suporta:

  • string
  • number
  • boolean
  • date

📄 Paginação

/users?page=2&limit=10

↕️ Ordenação

/users?sortBy=createdAt&sortOrder=desc

💭 Considerações finais

Frameworks backend deveriam ajudar a gente a ir mais rápido — não a repetir código.

Se você usa NestJS, o Smart Query pode eliminar centenas de linhas desnecessárias.

Às vezes, as melhores ferramentas são aquelas que simplesmente removem atrito.

© 2026 Seligadev.Todos os direitos reservados.