Skip to main content

Mutations

The CRUDResolver automatically exposes six mutation 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

todo-item.dto.ts
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​

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.

mutation {
createOneTodoItem(
input: { todoItem: { title: "Create One Todo Item", completed: false } }
) {
id
title
completed
created
updated
}
}

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​

The following example creates two TodoItems.

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
}
}

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​

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

mutation {
updateOneTodoItem(input: { id: 1, update: { completed: true } }) {
id
title
completed
created
updated
}
}

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​

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

mutation {
updateManyTodoItems(
input: { filter: { id: { in: [1, 2] } }, update: { completed: true } }
) {
updatedCount
}
}

Delete One​

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

Examples​

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

mutation {
deleteOneTodoItem(input: { id: 1 }) {
id
title
completed
created
updated
}
}

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​

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

mutation {
deleteManyTodoItems(
input: { filter: { title: { like: "Create Many Todo Items%" } } }
) {
deletedCount
}
}