1人のユーザが複数のinvitationを持ててしまう(など)
Opened this issue · 3 comments
現状の実装では1人のユーザに対してinvitationドキュメントが無限に作成可能なので、予期せぬ不具合を起こす可能性があります。
userとinvitationが1:1の関係になることを保証するために、以下のような実装をするとよいのではないかと思います。
・userのupdate(invitationのdecrement)とinvitationのcreateを同一の書き込みバッチ内で行う
・invitationのドキュメントIDにuser IDを利用する
また、Firestoreのドキュメントのフィールドに他のドキュメントのIDを文字列で保持するのは一般に下策です。
ユースケースを見てもDocumentReference型で保持するのが良いのではないかと思います。
userのupdate(invitationのdecrement)とinvitationのcreateを同一の書き込みバッチ内で行う
サボりました・・・
userとinvitationが1:1の関係になることを保証するために
これは意図的に1:nにしています。名前をサボっていたので申し訳ないのですが、こいつの正体は invitationHistoryです。
ユースケースを見てもDocumentReference型で保持するのが良いのではないかと思います。
サボりました・・・
これは意図的に1:nにしています。名前をサボっていたので申し訳ないのですが、こいつの正体は invitationHistoryです。
ここは僕の説明不足でした。1:nになるのはいいのですが、「1人のユーザが複数のユーザによって招待された、という状態ができてしまう」ことが問題です。
たとえば、僕のアカウントはGODによって1回、別のとあるユーザによって2回の合計3回招待されたという状態になっています。
toはコレクション全体を通じてユニークになるべきと思いますが、Firestoreにはunique制約みたいなものはないのでセキュリティルールによってこれを担保するためには(おそらく)invitationsのドキュメントIDを工夫する必要があるのではないかとおもいます。
別のとあるユーザによって2回の合計3回招待されたという状態になっています。
む、これは意図していない挙動ですね。ちょっと調べてみますmm