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 IdThe 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" } }}
#
QueryingAs 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=" } ] } }}
#
FilteringFiltering 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=" } ] } }}
#
SortingYou 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 eitherASC
orDESC
.nulls?
- Optional field to set nulls sort orderNULLS_FIRST
orNULLS_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=" } ] } }}