やりたいこと
- カラムの値をインクリメントしたい。
前提
- 環境はAmplify,GraphQL,AppSync,DynamoDBを使っている。
参考記事
こちらのドキュメントの「Create upvotePost and downvotePost Mutations (DynamoDB UpdateItem)」をセクションを読んだ。
手順1「Schemaに追記」
AWS AppSyncのコンソール画面 > Schema > 「type Mutation」にリゾルバを追記する > 保存
例えば「incrementCount」を追加するならこのように書く。
type Mutation {
incrementCount(id: ID!): Post
createPost(input: CreatePostInput!, condition: ModelPostConditionInput): Post
updatePost(input: UpdatePostInput!, condition: ModelPostConditionInput): Post
deletePost(input: DeletePostInput!, condition: ModelPostConditionInput): Post
}
手順2「アタッチ」
ドキュメントを読んでください。
In the Data types pane on the right, find the newly created upvotePost field on the Mutation type, and then choose Attach.
In Data source name, choose PostDynamoDBTable(選択できるテーブル名は人によって違う).
手順3「リクエストマッピングテンプレートの修正」
AWS AppSyncのコンソール画面 > Schema > 画面右のResolverからMutationセクションにある「incrementCount」を選択 > リゾルバー編集画面 > 編集後、保存。
リクエストマッピングテンプレート(DynamoDBへの命令?)、レスポンスマッピングテンプレート(DynamoDBからのレスポンス)を編集できる。テンプレートはJSON形式。
ここではリクエストマッピングテンプレートを下に示した内容で上書きする。
例えばups,versionカラムをそれぞれ1だけインクリメントするテンプレート。
{
"version" : "2017-02-28",
"operation" : "UpdateItem",
"key" : {
"id" : $util.dynamodb.toDynamoDBJson($context.arguments.id)
},
"update" : {
"expression" : "ADD ups :plusOne, version :plusOne",
"expressionValues" : {
":plusOne" : { "N" : 1 }
}
}
}
手順4「mutation.jsを編集」
export const incrementCount = /* GraphQL */ `
mutation IncrementCount(
$id: ID!
) {
incrementCount(id: $id) {
id
}
}
`;
手順5「インクリメントするコードを追記」
importのパスはそれぞれの環境に合わせて修正してください。
idが「SAMPLE ID」のレコードのカラムups,versionを1だけインクリメントする例。
import Amplify, { API, graphqlOperation } from "aws-amplify";
import { incrementCount } from "../graphql/mutations";
API.graphql(graphqlOperation(incrementCount, { id: "SAMPLE ID"}))