> ## Documentation Index
> Fetch the complete documentation index at: https://nestjs-query.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Endpoints

The [CRUDResolver](../resolvers) 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`

```ts title="todo-item.dto.ts" theme={null}
import { FilterableField } from '@ptc-org/nestjs-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.

<Tabs>
  <Tab title="GraphQL">
    ```graphql theme={null}
    {
      todoItem(id: "1") {
        id
        title
        completed
        created
        updated
      }
    }
    ```
  </Tab>

  <Tab title="Response">
    ```json theme={null}
    {
      "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"
        }
      }
    }
    ```
  </Tab>
</Tabs>

***

## Querying

As described above the `CRUDResolver` will expose a query method called `todoItems`. The result will be either
a [`connection`](https://relay.dev/graphql/connections.htm) or array depending on the [paging strategy you choose](./paging)

<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](./paging)
</Note>

By default if you do not provided an arguments it will uses a default value for [the page size](../dtos#result-page-size) and for the [sorting](../dtos/#default-sort).

<Tabs>
  <Tab title="GraphQL">
    ```graphql theme={null}
    {
      todoItems {
        pageInfo {
          hasNextPage
          hasPreviousPage
          startCursor
          endCursor
        }
        edges {
          node {
            id
            title
            completed
            created
            updated
          }
          cursor
        }
      }
    }
    ```
  </Tab>

  <Tab title="Response">
    ```json theme={null}
    {
      "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="
            }
          ]
        }
      }
    }
    ```
  </Tab>
</Tabs>
