お世話になります。
FirebaseのRealtimeDatabaseを用いてSNSの友達登録機能を以下のデータベースで実現しようと考えています。
その中で疑問点があり、正しい設計なのかご相談したく投稿させて頂きました。
ユースケースとして、userID1のtanakaがuserID2のsatoに友達登録する場合です。
具体的には以下のとおりです。
- tanakaがsatoのappIDを検索し、userAppIDに存在するか確認する.
- 存在していれば、tanakaは自身とsatoのappIDと紐付くfriendID1をfriendListに追加する。
- tanakaはsatoのfriendListにもfriendID1を追加する。
この場合、データベース設計は以下を想定しています。
Json
1"userList":{ 2 "userID1":true, 3 "userID2":true 4}, 5 6"userAppID":{ 7 "tanaka0701":true, 8 "sato1001":true 9}, 10 11"userInfo":{ 12 "userID1":{ 13 "name":"tanaka", 14 "appID":"tanaka0701", 15 "friendList":{ 16 "friendID1":true 17 } 18 }, 19 "userID2":{ 20 "name":"sato", 21 "appID":"sato1001", 22 "friendList":{ 23 "friendID1":true // userID1がuserID2のfriendListを更新する必要があるか? 24 } 25 }, 26}, 27 28"friendInfo": { 29 "friendID1":{ 30 "sender":"tanaka0701", 31 "reciever":"sato1001", 32 "created":123456 33 } 34}
・疑問点 1
3.の時に、tanakaはsatoのfriendList(userInfo/userID2/friendList/)を更新して良いのでしょうか?
tanakaが自分以外のuserInfoを更新することに違和感をもっています。
・疑問点 2
3.の時に、tanakaからの登録通知を受け取るためにsatoはどのデータをオブザーブするべきでしょうか。
userInfo/userID2/friendList/を常時オブザーブするべきでしょうか。
・疑問点 3
ユニークIDとなるfriendID1はchildByAutoId()を用いたものと認識しています。
以下の実装であっていますでしょうか?
Swift
1let ref = Database.database().reference() 2 3let postRef = ref.child("friendInfo").childByAutoId() 4postRef.setValue(["sender":"tanaka0701", "reciever":"sato1001", "created":123456]) 5 6ref.child("userInfo").child(Auth.auth().currentUser.uid).child("friendList").setValue([postRef.key:true])
お手数ですがご教示お願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/31 06:10