Follow機能: Back-end

まずは、タイムラインの実装に必要なフォロー機能を提供するGraphQL APIを実装していきます。

GraphQL APIの作成

FollowRelationshipテーブルを作成し、あるユーザーが他のユーザーをフォローしている状態を保存できるようにしましょう。 ./amplify/backend/api/BoyakiGql/schema.graphqlに、次のコードを追加します。

type FollowRelationship
	@model(
    mutations: {create: "createFollowRelationship", delete: "deleteFollowRelationship", update: null}
    timestamps: null
  )
	@auth(rules: [
		{allow: owner, ownerField:"followerId", provider: userPools, operations:[read, create, delete]},
		{allow: private, provider: userPools, operations:[read]}
	])
	@key(fields: ["followeeId", "followerId"])
{
	followeeId: ID!
	followerId: ID!
	timestamp: Int!
}

ポイントは以下です。

  • フィールド
    • followeeIdはフォローされている人のusernameです。
    • followerIdはフォローしている人のusernameです。
    • tiemstampはフォローした日時です。
  • @model
    • mutations:...では必要のないudpate用APIを作らない設定をします
    • timestamps:...では、デフォルトで自動的に付与されるupdatedAt``createdAtの属性を作らない設定をします。代わりにAWS Timestamp属性のtimestampを用います。
  • @auth
    • {allow: owner...により、ユーザーは自分をfollowerとしたFollowRelationshipの作成と閲覧ができます
    • {allow: private...では他のユーザーのFollowRelasionshipの閲覧を許可しています
  • @key
    • namequeryFieldを指定しない場合、DynamoDB Table自体のPartition Key(PK)やSecondary Key(SK)を設定することができます
    • 今回、Postを投稿したユーザーのフォロワーのTimelineにPostを複製するため、あるfolloweeIdに紐づくFollowRelationship一覧を取得する必要があります
    • そのためfolloweeIdをPK、followerIdをSKに指定します

Mockingによる動作確認

$ amplify mock apiを実行して、FollowRelationship APIが期待通り動くかどうか確認しましょう。

Amplify Mocking(手元での動作確認)には20002番ポートが利用可能である必要があり、一部の Cloud IDE では利用できないことがあります。 該当するCloud IDEをご利用の方は本手順は実施せず、雰囲気を味わっていただけますと幸いです。

amplify mock api

{中略}

AppSync Mock endpoint is running at http://XXX.XXX.XXX.XXX:20002

Mock endpointをコピーし、任意のブラウザでアクセスします。

createFollowRelationship

まず、FollowRelationshipを作成してみましょう。

  1. 左下のADD NEW Queryと書いてある場所をクリックし、Mutationを選択したのち+をクリックします。
  2. Update Authボタンを押して、Usernametest_followerにします
  3. 左のペインにあるcreateFollowRelationshipをクリックし、次図のようにチェックボックスやフィールド埋めてみましょう。
  4. followeeId: test_followee
  5. followerId: test_follower
  6. ▶︎をクリックしてGraphQLのMutationを実行します。

Unauthorized Errorが発生する場合、Update Authボタンを押して現在Mutationを発行しているユーザーのUsernameと、followerIdが一致していることを確かめてください。@authで設定した通り、フォローするユーザー(=フォロワー)しかcreateFollowRelationshipを実行できません。エラーが発生しなかった方はfollowerIdを別のUsernameとして実行し、Unauthorized Errorが発生することを確かめてみてください。

listFollowRelationships

次に、あるユーザーのフォロワー一覧を取得してみます。

  1. 左下のADD NEW Mutationと書いてある場所をクリックし、Queryを選択したのち+をクリックします。
  2. 左のペインにあるlistFollowRelationshipをクリックし、次図のようにチェックボックスやフィールド埋めてみましょう。
  3. followeeId: test_followee
  4. ▶︎をクリックしてGraphQLのQueryを実行します。
  5. 右側のペインに結果が表示されます。先ほど作成したFollowRelationshipが表示されていることを確認してください。