見出し画像

16日目、投稿のメニューバー

1.UIの設定

以下のように投稿の右上に・・・をつけました。

スクリーンショット 2021-05-17 19.35.26

他人の投稿でこの・・・を押すとフォロー解除ができるようにします

スクリーンショット 2021-05-17 19.37.12

自分の投稿のときは投稿を削除できるようにします。

スクリーンショット 2021-05-17 19.39.07

2.自分の投稿の削除

まずは投稿削除機能の実装から。ここでは以下のような処理が実行されています(以下に分かりやすいようにデータベースのモデルも載せておきます。)

画像4

まずはポストのコレクションのドキュメントから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) })
               }
           }
       }

これを投稿を削除するのアイコンにて呼び出します。

一応、削除できました。しかし、削除後すぐにリフレッシュ機能が必要ですね。

スクリーンショット 2021-05-17 20.17.41

スクリーンショット 2021-05-17 20.17.26

DBでも

スクリーンショット 2021-05-17 20.20.02

該当の投稿はデータがなくなっています!

リフレッシャーを追加しました。

タイトルなしっっq

3.他人の投稿からフォロー、フォロー解除

既にあるFollow機能、Follow解除機能を使うだけなので簡単に実装できます。

まず、ルフィーのアカウントでログインします。

ルフィーはコナンとドラえもんをフォローしているのでフォロー中は2人になっています

スクリーンショット 2021-05-17 20.52.54

ドラえもんをフォローしています。(フォロー中となっている)

スクリーンショット 2021-05-17 20.52.46

タイムラインのドラえもんの投稿にて、フォロー解除しました。

スクリーンショット 2021-05-17 20.54.50

そうすると、ルフィーのフォロー中は1人に変わります。

それとドラえもんのページにいくとフォローしていないです

スクリーンショット 2021-05-17 20.56.17

今日はこれでおしまいです。


この記事が気に入ったらサポートをしてみませんか?