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
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.
- GraphQL
- Response
mutation {
createOneTodoItem(
input: { todoItem: { title: "Create One Todo Item", completed: false } }
) {
id
title
completed
created
updated
}
}
{
"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
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
.
- GraphQL
- Response
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
}
}
{
"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
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
- GraphQL
- Response
mutation {
updateOneTodoItem(input: { id: 1, update: { completed: true } }) {
id
title
completed
created
updated
}
}
{
"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
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
.
- GraphQL
- Response
mutation {
updateManyTodoItems(
input: { filter: { id: { in: [1, 2] } }, update: { completed: true } }
) {
updatedCount
}
}
{
"data": {
"updateManyTodoItems": {
"updatedCount": 2
}
}
}
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.
- GraphQL
- Response
mutation {
deleteOneTodoItem(input: { id: 1 }) {
id
title
completed
created
updated
}
}
{
"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
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
.
- GraphQL
- Response
mutation {
deleteManyTodoItems(
input: { filter: { title: { like: "Create Many Todo Items%" } } }
) {
deletedCount
}
}
{
"data": {
"deleteManyTodoItems": {
"deletedCount": 6
}
}
}