pj-picbook / picbook

9 stars 0 forks source link

本棚から書籍を削除(UI) #139

Closed karokita closed 1 year ago

karokita commented 2 years ago

概要

要件

karokita commented 2 years ago

@どなたかおやさしい方 本棚から書籍を削除するタスクに手をつけたいと思ってまして、アドバイスいただけるとうれしみです!

現状の書籍登録の処理を参考にしながら削除を実装しようと思ったのですが、 下記の考え方であってますでしょうか?

<やろうとしていること> ・作品詳細ページで削除ボタンを押下すると本棚から削除される (※一旦、長押し削除はやめてボタン削除にする)

<現状のpicbookでの書籍登録の際の処理> ・book_detail_pageで登録ボタンを押すと、book_notifire.dartのregisterBookの処理が走る ・book_notifire.dartのregisterBookでは、bookshelfRepositoryのuidをfetchしつつ、booksRepositoryをcreateしている

<上記を踏まえた上での書籍削除の手順> ・book_notifire.dartでdeleteBookを作成する ・bookを引数に設定して、book idを渡す ・book_detail_page.dartでボタン押下時に、book_notifire.dartで設定したdeleteBookを呼び出すことで削除完了

Romu1273x commented 2 years ago

あってます。 books_repositoryにdeleteメソッド(firebaseのデータを削除)がないのでそこからですね。 user_repositoryにdeleteメソッドがあるのでそれ参考にすれば良いと思います。

karokita commented 2 years ago

Romuさん、ありがとうございます!やってみます!

karokita commented 2 years ago

どなたかご存知の方いたら教えていただけるとありがたいです🙇‍♀️ 今、本棚から書籍を削除しようとしていまして、またまたひっかかっています。

現在、user_repositoryを参考にしながら、books_repositoryでdeleteメソッドを作ろうとしています。

が!user_repositoryには削除するドキュメント名が「user.id」と明確にあるのですが、books_repositoryだと空欄になっていて、何を指定したら…?となってます。(添付画像)

これは何かまた別の場所でidを定義したらいいのか、もしくは空欄のままで良いものでしょうか? スクリーンショット 2022-09-12 21 49 41

kawadon780 commented 2 years ago

@karokita 空欄で現状は問題ない認識です。

理由としては、空白の場合、ランダムで存在しないユニークな文字列が生成されているはずです。勿論ここのIDは自分で好きな値を設定できますが、それをする意味は現状の仕組みだとないような気がします。

user_repositoryのuidは「firebase auth」(認証機能、ユーザーを管理している)により生成されたIDを「firestore」に保存しているので、設定している感じです。

kawadon780 commented 2 years ago

@karokita ってcreateの方みてましたが、deleteの方は指定しないとだめでした。

なので削除したい本のIDを指定すればよいかと思います。 削除したい本のIDはどっかに保存してある認識です。

kawadon780 commented 2 years ago

@karokita 五月雨ですみません。 bookにID保存していると思ったんですが現状ないので保存する場所と、保存する処理を書かないといけなそうです。

karokita commented 2 years ago

@kawadon780 今めちゃめちゃ探してましたw 教えていただいてありがとうございます!

そしたらUserかbookshelfでID保存している見本を探して、bookのIDの保存場所を作る&保存処理を書くと良さそうですね。

アーキテクチャを見ている感じですとxxxxrepository.dartでその処理を行なってる感じでしょうか?🤔

kawadon780 commented 2 years ago

@karokita 自分でここら辺コード書いてて実装完全にわすれていました(泣)

んで、参考になるはずのコードなのですが bookshelfId: bookshelfs[0].id, // TODO:本来は複数予定 の所みるとこんな風に「 bookshelf」クラスにfeachAllで取得した0番目(本棚一個想定なので)のIDを設定しているというスーパーゴリラ押しなのでこれを真似てしまうとちょっとまずそうですね。。本は複数ですもんね。

なので、本を登録した時に本の情報を取得する処理を書いて( _bookshelfRepository.fetchAllみたいな)、IDを取得したら再度本のIDを更新する処理を書かないといけなそうなです。IDは複数返却されちゃうのでIDが空白かつISBNが一致するものとかでIDを特定するか、登録したばかりの情報を取得できるみたいなapiがあればそれを使うといいです(ないかも)

で、IDを保存する場所ないので Bookshelf({ @Default("") @JsonKey(name: 'id') String id, を真似してBookクラスあたりにidを追加すればよさそうです。

BookクラスはFreezedで更新しないとだめです~。