
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:
Transformar parâmetros de query bagunçados em um objeto limpo e estruturado.
Endpoints começam simples:
GET /usersAgora seu backend precisa:
👉 E todo dev acaba escrevendo as mesmas 200 linhas de código…
De novo.
E de novo.
E de novo.
Ele transforma automaticamente os parâmetros da requisição em um objeto estruturado que seu service pode usar diretamente.
@Get()
@UseInterceptors(SmartQueryInterceptor)
async getUsers(@Req() req: Request) {
return this.userService.findAll(req.smartQuery)
}Tudo limpo.
Tipado.
Organizado.
/users?searchTerm=johnSuporta:
/users?page=2&limit=10/users?sortBy=createdAt&sortOrder=descFrameworks 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.