CloudFunctionsでフォロワー、フォローの数を集計する #CloudFunctions #CloudFirestore

シェアする

フクシャチョーです。

今日はCloudFunctionsでフォロワー・フォローのカウントの集計をします。

よくある、あの数字の表示をするものです

アプリで、Aさんのフォローボタンを押すと、

自分のFollowingのカウントと、AさんのFollowerカウントが+1になります。

逆に、Aさんのフォロー解除ボタンを押すと、

自分のFollowingのカウントと、AさんののFollowerカウントが−1になります。

これをCloudFunctionsで集計します。

アプリ側の実装

データベースはCloudFirestoreを使います。

アプリからフォロー、フォロー解除のアクションを起こした時に、

relationshipsコレクションにドキュメントを追加、削除するようにします。

ドキュメントのIDは「フォローする側のID_フォローされる側のID(followerId_followedId)」とします。

CloudFunctions側の実装

CloudFunctionsでは、relationshipsコレクションに、ドキュメントが追加、削除されたイベントで、userコレクションの、対象ユーザーのドキュメントのfollowerCountfollowingCountを更新します。

イベントタイプ

今回はrelationshipsコレクションに、ドキュメントが追加、削除されたのをトリガーとしたいので、onWriteを実装します

Cloud Firestoreのイベントタイプとトリガーについて

Cloud Firestore は、createupdatedeletewrite イベントをサポートしています。

イベントタイプ トリガー
onCreate ドキュメントが最初に書き込まれたときにトリガーされます。
onUpdate すでに存在するドキュメントの値が変更されたときにトリガーされます。
onDelete データを含むドキュメントが削除されたときにトリガーされます。
onWrite onCreateonUpdate または onDelete がトリガーされたときにトリガーされます。

イベントデータ

さて、ここからイベントに含まれるデータを取得するのですが、今回利用しているSDKはv1.0のAPIとなります。
v1.0からイベントデータが DataSnapshot に変更されています。
以前のリリースでは、event.data は DeltaSnapshot でしたが、現在の v 1.0 では DataSnapshot です。

onWrite イベントと onUpdate イベントのデータ パラメータには before フィールドと after フィールドがあります。これらはそれぞれ DataSnapshot です。

変更前後のデータを取得するのは以下のように記述します

さて、実際にrelationshipsコレクションのCloudFunctionsを実装してみましょう。

引数で受け取るchangeは以下のようなデータが入って来ます。

beforeにデータがあり、afterにデータがない場合は削除

beforeにデータがなく、afterにデータがある場合は登録

となります。

その為、CloudFunctions内では、変更前後のデータがない場合は無効とし、

変更前のデータが存在する場合は、カウントを-1

変更後のデータが存在する場合は、カウントを+1としています。

次にcontextのパラメータから、relationshipIdを取得します。

contextには以下のようなデータが入って来ます

relationshipIdは「フォローする側のID_フォローされる側のID(followerId_followedId)」となっているのでsplitで分割します。

CloudFirestoreのトランザクション処理

さてここからがCloudFirestoreのトランザクション処理に入ります。

フォローする側のユーザードキュメントとフォローされる側のユーザードキュメントを同時に更新する必要があるためです。

トランザクションと一括書き込み  |  Firebase 

アプリ側で、フォローしたり、アンフォローしてみましょう。

対象ユーザーのfollowingCountとfollowerCountが期待通りに増減すればOKです。

これで、アプリ側のユーザー画面では、userコレクションのデータを取得するだけで、以下のような数字を表示することができますね。

Firebase SDK for Cloud Functions 移行ガイド: ベータ版からバージョン 1.0 へ 

Cloud Firestore トリガー  |  Firebase 

CloudFunctions API Overview  |  Firebase 

CloudFirestore トランザクションと一括書き込み  |  Firebase 

スポンサーリンク
スポンサーリンク
スポンサーリンク

シェアする

フォローする

スポンサーリンク
スポンサーリンク