nestjs-rest-querynestjs-rest-query
Getting StartedFirst endpoint

First endpoint

The shortest path to getting nestjs-rest-query working.

If you want to validate the library quickly, this is the shortest path:

  1. install the package
  2. configure the NestJS prerequisites
  3. decorate an endpoint with @ApiDynamicQuery
  4. inject @QueryRules()
  5. call queryBuilderService.execute()

Minimal example

users.controller.ts
import { Controller, Get, Query } from '@nestjs/common';
import { ApiTags } from '@nestjs/swagger';
import {
  ApiDynamicQuery,
  DynamicQueryDto,
  QueryRules,
  RulesConfig,
} from 'nestjs-rest-query';
import { UsersService } from './users.service';

@ApiTags('users')
@Controller('users')
export class UsersController {
  constructor(private readonly usersService: UsersService) {}

  @Get()
  @ApiDynamicQuery({
    filters: ['name', 'email', 'status'],
    sorts: ['name', 'createdAt'],
    fields: ['id', 'name', 'email', 'status', 'createdAt'],
  })
  findAll(@Query() query: DynamicQueryDto, @QueryRules() rules: RulesConfig) {
    return this.usersService.findAll(query, rules);
  }
}
users.service.ts
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import {
  DynamicQueryDto,
  QueryBuilderService,
  QueryResult,
  RulesConfig,
} from 'nestjs-rest-query';
import { User } from './user.entity';

@Injectable()
export class UsersService {
  constructor(
    @InjectRepository(User)
    private readonly usersRepo: Repository<User>,
    private readonly queryBuilderService: QueryBuilderService
  ) {}

  findAll(
    query: DynamicQueryDto,
    rules: RulesConfig
  ): Promise<QueryResult<User>> {
    return this.queryBuilderService.execute(this.usersRepo, query, rules);
  }
}

Usage example

GET /users?filter[name][like]=ana&page=1&perPage=10

Expected response:

{
  "data": [
    {
      "id": 1,
      "name": "Ana Lima",
      "email": "ana@email.com",
      "status": "active"
    }
  ],
  "page": 1,
  "perPage": 10,
  "total": 1,
  "lastPage": 1
}

Request lifecycle

Rendering Mermaid diagram...

If it worked, continue to the Usage Guide to see all parameters, operators, and whitelist options.

Edit this page on GitHub

On this page