3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Amplify,GraphQL,AppSyncでカスタムリゾルバーを作成して簡単なmutationを行う

Posted at

やりたいこと

  • カラムの値をインクリメントしたい。

前提

  • 環境は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を編集」

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"}))
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?