Queries
The CRUDResolver automatically exposes two query endpoints. The endpoints names will be derived from
name provided to @ObjectType or the class name.
The following examples are based on the following TodoItemDTO
import { FilterableField } from '@nestjs-query/query-graphql';import { ObjectType, ID, GraphQLISODateTime } from '@nestjs/graphql';
@ObjectType('TodoItem')export class TodoItemDTO { @IDField(() => ID) id!: string;
@FilterableField() title!: string;
@FilterableField() completed!: boolean;
@FilterableField(() => GraphQLISODateTime) created!: Date;
@FilterableField(() => GraphQLISODateTime) updated!: Date;}
In the following examples you will see two endpoints referenced
todoItem- graphql endpoint to find a record by id.todoItems- graphql endpoint to filter, page, and sort records,
Find By Id#
The following example finds a TodoItem by id.
- GraphQL
- Response
{ todoItem(id: "1") { id title completed created updated }}
{ "data": { "todoItem": { "id": "1", "title": "Create One Todo Item", "completed": false, "created": "2020-01-14T07:00:31.763Z", "updated": "2020-01-14T07:00:31.763Z" } }}Querying#
As described above the CRUDResolver will expose a query method called todoItems. The result will be either
a connection or array depending on the paging strategy you choose
note
All examples below assume that a connection is returned but filtering and sorting work the same way for all paging strategies. To read how to page collections read the paging docs
By default if you do not provided an arguments you can query for all records.
- GraphQL
- Response
{ todoItems{ pageInfo{ hasNextPage hasPreviousPage startCursor endCursor } edges{ node{ id title completed created updated } cursor } }}{ "data": { "todoItems": { "pageInfo": { "hasNextPage": false, "hasPreviousPage": false, "startCursor": "YXJyYXljb25uZWN0aW9uOjA=", "endCursor": "YXJyYXljb25uZWN0aW9uOjI=" }, "edges": [ { "node": { "id": "1", "title": "Create One Todo Item", "completed": false, "created": "2020-01-01T00:43:16.000Z", "updated": "2020-01-01T00:43:16.000Z" }, "cursor": "YXJyYXljb25uZWN0aW9uOjA=" }, { "node": { "id": "2", "title": "Create Many Todo Items - 1", "completed": false, "created": "2020-01-01T00:49:01.000Z", "updated": "2020-01-01T00:49:01.000Z" }, "cursor": "YXJyYXljb25uZWN0aW9uOjE=" }, { "node": { "id": "3", "title": "Create Many Todo Items - 2", "completed": true, "created": "2020-01-01T00:49:01.000Z", "updated": "2020-01-01T00:49:01.000Z" }, "cursor": "YXJyYXljb25uZWN0aW9uOjI=" } ] } }}Filtering#
Filtering in query-graphql has has an object based syntax
For a full reference of filter operations see filter reference
The following example filters for all todoItems that are marked completed.
- GraphQL
- Response
{ todoItems(filter: {completed: {is: true}}){ pageInfo{ hasNextPage hasPreviousPage startCursor endCursor } edges{ node{ id title completed created updated } cursor } }}{ "data": { "todoItems": { "pageInfo": { "hasNextPage": false, "hasPreviousPage": false, "startCursor": "YXJyYXljb25uZWN0aW9uOjA=", "endCursor": "YXJyYXljb25uZWN0aW9uOjE=" }, "edges": [ { "node": { "id": "3", "title": "Create Many Todo Items - 2", "completed": true, "created": "2020-01-14T07:00:34.111Z", "updated": "2020-01-14T07:00:34.111Z" }, "cursor": "YXJyYXljb25uZWN0aW9uOjA=" }, { "node": { "id": "5", "title": "Create Many Todo Items - 4", "completed": true, "created": "2020-01-14T07:01:27.805Z", "updated": "2020-01-14T07:01:27.805Z" }, "cursor": "YXJyYXljb25uZWN0aW9uOjE=" } ] } }}Sorting#
You can sort by one or more fields by using the sorting parameter.
The sorting parameter is an array where each item has the following options.
field!- The name of the field to sort by.direction!- The direction to sort eitherASCorDESC.nulls?- Optional field to set nulls sort orderNULLS_FIRSTorNULLS_last
In this example we sort by title descending.
- GraphQL
- Response
{ todoItems(sorting: [{ field: title, direction: DESC }]) { pageInfo { hasNextPage hasPreviousPage startCursor endCursor } edges { node { id title completed created updated } cursor } }}
{ "data": { "todoItems": { "pageInfo": { "hasNextPage": false, "hasPreviousPage": false, "startCursor": "YXJyYXljb25uZWN0aW9uOjA=", "endCursor": "YXJyYXljb25uZWN0aW9uOjQ=" }, "edges": [ { "node": { "id": "1", "title": "Create One Todo Item", "completed": false, "created": "2020-01-14T07:00:31.763Z", "updated": "2020-01-14T07:00:31.763Z" }, "cursor": "YXJyYXljb25uZWN0aW9uOjA=" }, { "node": { "id": "5", "title": "Create Many Todo Items - 4", "completed": true, "created": "2020-01-14T07:01:27.805Z", "updated": "2020-01-14T07:01:27.805Z" }, "cursor": "YXJyYXljb25uZWN0aW9uOjE=" }, { "node": { "id": "4", "title": "Create Many Todo Items - 3", "completed": false, "created": "2020-01-14T07:01:27.805Z", "updated": "2020-01-14T07:01:27.805Z" }, "cursor": "YXJyYXljb25uZWN0aW9uOjI=" }, { "node": { "id": "3", "title": "Create Many Todo Items - 2", "completed": true, "created": "2020-01-14T07:00:34.111Z", "updated": "2020-01-14T07:00:34.111Z" }, "cursor": "YXJyYXljb25uZWN0aW9uOjM=" }, { "node": { "id": "2", "title": "Create Many Todo Items - 1", "completed": false, "created": "2020-01-14T07:00:34.111Z", "updated": "2020-01-14T07:00:34.111Z" }, "cursor": "YXJyYXljb25uZWN0aW9uOjQ=" } ] } }}In this example we sort by completed and title.
- GraphQL
- Response
{ todoItems( sorting: [ { field: completed, direction: ASC } { field: title, direction: DESC } ] ) { pageInfo { hasNextPage hasPreviousPage startCursor endCursor } edges { node { id title completed created updated } cursor } }}{ "data": { "todoItems": { "pageInfo": { "hasNextPage": false, "hasPreviousPage": false, "startCursor": "YXJyYXljb25uZWN0aW9uOjA=", "endCursor": "YXJyYXljb25uZWN0aW9uOjQ=" }, "edges": [ { "node": { "id": "1", "title": "Create One Todo Item", "completed": false, "created": "2020-01-14T07:00:31.763Z", "updated": "2020-01-14T07:00:31.763Z" }, "cursor": "YXJyYXljb25uZWN0aW9uOjA=" }, { "node": { "id": "4", "title": "Create Many Todo Items - 3", "completed": false, "created": "2020-01-14T07:01:27.805Z", "updated": "2020-01-14T07:01:27.805Z" }, "cursor": "YXJyYXljb25uZWN0aW9uOjE=" }, { "node": { "id": "2", "title": "Create Many Todo Items - 1", "completed": false, "created": "2020-01-14T07:00:34.111Z", "updated": "2020-01-14T07:00:34.111Z" }, "cursor": "YXJyYXljb25uZWN0aW9uOjI=" }, { "node": { "id": "5", "title": "Create Many Todo Items - 4", "completed": true, "created": "2020-01-14T07:01:27.805Z", "updated": "2020-01-14T07:01:27.805Z" }, "cursor": "YXJyYXljb25uZWN0aW9uOjM=" }, { "node": { "id": "3", "title": "Create Many Todo Items - 2", "completed": true, "created": "2020-01-14T07:00:34.111Z", "updated": "2020-01-14T07:00:34.111Z" }, "cursor": "YXJyYXljb25uZWN0aW9uOjQ=" } ] } }}