Create payload types
Payloads types are not mapped to the database, and only serve as wrappers of an operation’s response.
They typically pass a more complex object than just an entity. For example,
you can add fields that check the applied
status for a conditional query, or
the pagingState
.
In this example, a payload type SelectBookResult
is created that accepts an array
of books as the input. The associated query can use the required title
and optional pagingState
as input, and will return an array of books along with the pagingState
.
type SelectBookResult @cql_payload { (1)
data: [Book]
pagingState: String
}
type Query {
books(
title: String!,
pagingState: String @cql_pagingState (2)
): SelectBookResult @cql_select(pageSize: 10) (3)
}
Directives in example:
1 | The @cql_payload directive defines the type as a payload. |
2 | The @cql_pagingState directive defines the fields as a storing a paging state. |
3 | The @cql_select(pageSize: 10) directive defines how many results to return by
page if the query is paginated, with an Integer input.
Another parameter is also available, limit: 10 , which is the maximum total number of
results to return, with an Integer input. |
An example of retrieving data using this query is found below.
Often, you wish to know if an operation was successful. Creating a payload type that
uses a boolean field applied
can definitively answer if a conditional operation
completes correctly.
Create a payload type that uses your standard object type as a field, along with applied
:
type Book @key @cql_entity(name: "book") @cql_input {
title: String! @cql_column(partitionKey: true)
isbn: String @cql_column(clusteringOrder: ASC)
author: [String] @cql_index(name: "author_idx", target: VALUES)
}
type InsertBookResponse @cql_payload {
applied: Boolean!
book: Book!
}
type Mutation {
insertBookIfNotExists(book: BookInput!): InsertBookResponse
}
If the conditional insert is successful (the row did not exist), then applied will be true and book will echo back the data that was just inserted; otherwise, applied will be false and book will be the existing data.