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