16日目、投稿のメニューバー
1.UIの設定
以下のように投稿の右上に・・・をつけました。
他人の投稿でこの・・・を押すとフォロー解除ができるようにします
自分の投稿のときは投稿を削除できるようにします。
2.自分の投稿の削除
まずは投稿削除機能の実装から。ここでは以下のような処理が実行されています(以下に分かりやすいようにデータベースのモデルも載せておきます。)
・まずはポストのコレクションのドキュメントからpost-likes(いいねしている人)のuidを取得します。その後、そのuidをユーザのコレクションのドキュメントから特定し、そのユーザが持っているいいねした情報(user-likes)から削除する投稿(postId)を削除します。
//まずはポストのコレクションのドキュメントからpost-likes(いいねしている人)のuidを取得します。
COLLECTION_POSTS.document(postId).collection("post-likes").getDocuments { snapshot, _ in
guard let uids = snapshot?.documents.map({ $0.documentID }) else { return }
//その後、そのuidをユーザのコレクションのドキュメントから特定し、そのユーザが持っているいいねした情報(user-likes)から削除する投稿(postId)を削除します。
uids.forEach({ COLLECTION_USERS.document($0).collection("user-likes").document(postId).delete() })
}
・次はfollowersのコレクションのドキュメントから、現在のユーザのフォロワー(user-followers)のuidを取得します。そしてそのuidからユーザを特定し、削除する投稿(postId)をそのユーザのuser-feedから削除します。そしてそのユーザのお知らせ(user-notification)からも削除する投稿(postId)とイコールのものを見つけて削除します。
COLLECTION_POSTS.document(postId).delete { _ in
//followersのコレクションのドキュメントから、現在のユーザのフォロワー(user-followers)のuidを取得します。
COLLECTION_FOLLOWERS.document(uid).collection("user-followers").getDocuments { snapshot, _ in
guard let uids = snapshot?.documents.map({ $0.documentID }) else { return }
//そしてそのuidからユーザを特定し、削除する投稿(postId)をそのユーザのuser-feedから削除します
uids.forEach({ COLLECTION_USERS.document($0).collection("user-feed").document(postId).delete() })
//そしてそのユーザのお知らせ(user-notification)からも削除する投稿(postId)とイコールのものを見つけて削除します。
let notificationQuery = COLLECTION_NOTIFICATIONS.document(uid).collection("user-notifications")
notificationQuery.whereField("postId", isEqualTo: postId).getDocuments { snapshot, _ in
guard let documents = snapshot?.documents else { return }
documents.forEach({ $0.reference.delete(completion: completion) })
}
}
}
これを投稿を削除するのアイコンにて呼び出します。
一応、削除できました。しかし、削除後すぐにリフレッシュ機能が必要ですね。
DBでも
該当の投稿はデータがなくなっています!
リフレッシャーを追加しました。
3.他人の投稿からフォロー、フォロー解除
既にあるFollow機能、Follow解除機能を使うだけなので簡単に実装できます。
まず、ルフィーのアカウントでログインします。
ルフィーはコナンとドラえもんをフォローしているのでフォロー中は2人になっています
ドラえもんをフォローしています。(フォロー中となっている)
タイムラインのドラえもんの投稿にて、フォロー解除しました。
そうすると、ルフィーのフォロー中は1人に変わります。
それとドラえもんのページにいくとフォローしていないです
今日はこれでおしまいです。