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

# Mutations

> The  automatically exposes six mutation endpoints. The endpoints names will be derived from name provided to  or the class name.

The following examples are based on the following `TodoItemDTO`

```ts todo-item.dto.ts theme={null}
import { FilterableField, IDField } 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 the following endpoints referenced

* `createOneTodoItem` - graphql endpoint to create a single record.

* `createManyTodoItems` - graphql endpoint to create multiple records,

* `updateOneTodoItem` - graphql endpoint to update a single record by id.

* `updateManyTodoItems` - graphql endpoint update multiple records with a filter,

* `deleteOneTodoItem` - graphql endpoint to delete one record by id.

* `deleteManyTodoItems` - graphql endpoint to delete multiple records with a filter.

### Create One[​](#create-one "Direct link to Create One")

The `CRUDResolver` will by default expose a `createOne` mutation using the name of the DTO to name the mutation.

In this example we create a single `TodoItem`, the input by default will be a `Partial` of the DTO.

> [tab] GraphQL
>
> ```graphql theme={null}
> mutation {
>   createOneTodoItem(
>     input: { todoItem: { title: "Create One Todo Item", completed: false } }
>   ) {
>     id
>     title
>     completed
>     created
>     updated
>   }
> }
> ```

> [tab] Response
>
> ```json theme={null}
> {
>   "data": {
>     "createOneTodoItem": {
>       "id": "1",
>       "title": "Create One Todo Item",
>       "completed": false,
>       "created": "2020-01-14T09:01:35.834Z",
>       "updated": "2020-01-14T09:01:35.834Z"
>     }
>   }
> }
> ```

***

### Create Many[​](#create-many "Direct link to Create Many")

The `CRUDResolver` will by default expose a `createMany` mutation using the name of the DTO to name the mutation.

In this example we create multiple `TodoItems`, the each record is a `Partial` of the DTO.

#### Examples[​](#examples "Direct link to Examples")

The following example creates two `TodoItems`.

> [tab] GraphQL
>
> ```graphql theme={null}
> mutation {
>   createManyTodoItems(
>     input: {
>       todoItems: [
>         { title: "Create Many Todo Items - 1", completed: false }
>         { title: "Create Many Todo Items - 2", completed: true }
>       ]
>     }
>   ) {
>     id
>     title
>     completed
>     created
>     updated
>   }
> }
> ```

> [tab] Response
>
> ```json theme={null}
> {
>   "data": {
>     "createManyTodoItems": [
>       {
>         "id": "2",
>         "title": "Create Many Todo Items - 1",
>         "completed": false,
>         "created": "2020-01-14T09:01:55.110Z",
>         "updated": "2020-01-14T09:01:55.110Z"
>       },
>       {
>         "id": "3",
>         "title": "Create Many Todo Items - 2",
>         "completed": true,
>         "created": "2020-01-14T09:01:55.110Z",
>         "updated": "2020-01-14T09:01:55.110Z"
>       }
>     ]
>   }
> }
> ```

***

### Update One[​](#update-one "Direct link to Update One")

The `CRUDResolver` will by default expose an `updateOne` mutation that takes two fields:

* `id`: The id of the record to update.
* `update`: The values to update on the record. This is a partial so you only have to pass in the values you want to change.

#### Examples[​](#examples-1 "Direct link to Examples")

The following example updates the record with `id` equal to `1` to `completed=true`

> [tab] GraphQL
>
> ```graphql theme={null}
> mutation {
>   updateOneTodoItem(input: { id: 1, update: { completed: true } }) {
>     id
>     title
>     completed
>     created
>     updated
>   }
> }
> ```

> [tab] Response
>
> ```json theme={null}
> {
>   "data": {
>     "updateOneTodoItem": {
>       "id": "1",
>       "title": "Create One Todo Item",
>       "completed": true,
>       "created": "2020-01-14T07:00:31.763Z",
>       "updated": "2020-01-14T09:02:28.167Z"
>     }
>   }
> }
> ```

***

### Update Many[​](#update-many "Direct link to Update Many")

The `CRUDResolver` will by default expose an `updateMany` mutation that takes two fields:

* `filter`: The filter to use to find the records to update.
  * **NOTE** The filter **CANNOT** be an empty object. This prevents accidental updating of all records.
* `update`: The values to update on the record. This is a partial so you only have to pass in the values you want to change.

The response contains the number of records updated.

#### Examples[​](#examples-2 "Direct link to Examples")

The following example updates records with an `id` equal to 1 or 2 to `completed=true`.

> [tab] GraphQL
>
> ```graphql theme={null}
> mutation {
>   updateManyTodoItems(
>     input: { filter: { id: { in: [1, 2] } }, update: { completed: true } }
>   ) {
>     updatedCount
>   }
> }
> ```

> [tab] Response
>
> ```json theme={null}
> {
>   "data": {
>     "updateManyTodoItems": {
>       "updatedCount": 2
>     }
>   }
> }
> ```

***

### Delete One[​](#delete-one "Direct link to Delete One")

The `CRUDResolver` will by default expose a `deleteOne` mutation that allows you to delete a record by id:

#### Examples[​](#examples-3 "Direct link to Examples")

The following example deletes the record with an id equal to 1.

> [tab] GraphQL
>
> ```graphql theme={null}
> mutation {
>   deleteOneTodoItem(input: { id: 1 }) {
>     id
>     title
>     completed
>     created
>     updated
>   }
> }
> ```

> [tab] Response
>
> ```json theme={null}
> {
>   "data": {
>     "deleteOneTodoItem": {
>       "title": "Create One Todo Item",
>       "completed": true,
>       "created": "2020-01-14T07:00:31.763Z",
>       "updated": "2020-01-14T09:02:51.429Z"
>     }
>   }
> }
> ```

***

### Delete Many[​](#delete-many "Direct link to Delete Many")

The CRUDResolver will by default expose a `deleteMany` mutation that takes a `filter`:

**NOTE** The filter **CANNOT** be an empty object. This prevents accidental deletion of all records.

#### Examples[​](#examples-4 "Direct link to Examples")

The following example deletes all records that start with `Create Many Todo Items`.

> [tab] GraphQL
>
> ```graphql theme={null}
> mutation {
>   deleteManyTodoItems(
>     input: { filter: { title: { like: "Create Many Todo Items%" } } }
>   ) {
>     deletedCount
>   }
> }
> ```

> [tab] Response
>
> ```json theme={null}
> {
>   "data": {
>     "deleteManyTodoItems": {
>       "deletedCount": 6
>     }
>   }
> }
> ```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.