Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ログアウト状態で作成した視聴予定がログインすると消えてしまう #131

Open
e-ikuta opened this issue Apr 5, 2024 · 2 comments
Labels
enhancement New feature or request

Comments

@e-ikuta
Copy link
Collaborator

e-ikuta commented Apr 5, 2024

再現手順

  1. ログインしていない状態でスケジュールを視聴予定に追加する
  2. ログインする
  3. 視聴予定が消える(ログイン状態の視聴予定で上書きされる)

※ ログアウトしても、1で追加した視聴予定は復活しない。

期待する挙動

  • ユーザー体験としては、1で追加した視聴予定が2でログイン状態の視聴予定に引き継がれるのが良さそう。
  • 以下の手順のように、ログイン状態の視聴予定とログアウト状態の視聴予定が競合する場合を考慮すると話がややこしいので、視聴予定を追加するにはログインを前提とするのもあり。

3のつづきで
4. ログイン状態で視聴予定を追加する
5. ログアウトする(視聴予定がリセットされる)
6. ログアウト状態で視聴予定を追加する
7. ログインする
8. ログイン状態の視聴予定 vs ログアウト状態の視聴予定、どっちを表示するんだい?

@kinoppyd
Copy link
Member

kinoppyd commented Apr 5, 2024

設計としては意図した挙動です。ですが、期待する挙動ではないと感じられるのであれば、より良い方に変更する方法を考えたいと思います。

Plan, User, Profileの関係性

まず、視聴予定(Plan)とユーザー(User)、そしてGitHubでのサインアップアカウント(Profile)の関係性から説明します。利用者がPlanを作成するためには、必ずUserが必要です。Userが作成される過程には、「サインアップせずにPlanを作成する」方法と、「サインアップしてProfileを作ることで自動的にUserとPlanが割り当てられる」という二つの方法があります。

サインアップをせずにPlanを作成する方法では、まず最初にGitHubでのサインアップをせず、タイムテーブルの画面から予定に追加ボタンを押し、利用規約に同意することでUserとPlanが作成され、セッションにはUserが設定されます。このときProfileは存在しません。

サインアップしてProfileを作ることで自動的にUserとPlanが割り当てられる方法では、まず最初にGitHubのOAuthを利用してProfileを作成し、付随して自動的にUserとPlanが作成され、セッションにはUserが設定されます。

サインアップをせずにPlanを作成

この方法のとき、UserはPlanを持っていますが、Profileを持っていません。この状態でGitHubでサインアップすると、新たにProfileが作成され、Userに紐付けられます。Planはサインアップ前の物が引き継がれます。この挙動にした意図は、サインアップ前に匿名で作成していた予定を、サインアップ後も引き継ぎたいと思われるためです。

サインアップしてUserとPlanを作成

この方法のとき、GitHubでサインアップした時点で空のPlanがUserに割り当てられます。その後、利用者はこのPlanに視聴予定を追加していきます。

再現手順の挙動が発生する理由

上記の関係性の説明のとおり、利用者がサインアップした段階では「サインアップ前のPlanを引き継ぐ」もしくは「最初から空のPlanが割り当てられる」かのどちらかです。つまり、サインアップした時点で、そのPlanは利用者が意思を持って自分の作成したプランです。

その前提の上で、再現手順を振り返ると、「3. 視聴予定が消える(ログイン状態の視聴予定で上書きされる)」の状態は、既に一度サインアップして自分のPlanを所有しているにも関わらず、ログアウトして再度別のPlanの作成を始めている状態です。このとき、サインアップ済みの利用者が保有しているPlanはUserに紐付いているので、ログアウト後に作成した匿名ユーザーのPlanとは別物です。その二つをマージすることは矛盾が生じることになるため、サインアップ後は本来所有していたPlanのみを残す、という挙動を意図して設計しました。

議論したい点

このアプリの使用上、利用者は匿名で視聴予定を作成できる必要があります。理由として、去年までの予定は全てサインアップ無しで作成し閲覧できるため、互換性の観点から必要です。また、去年まではGitHubのサインアップは不要で予定を作成できたのに、今年から必須にするというのは利用者に不便を強いるからです。そのため、視聴予定を追加するためにログインを前提とするのは無しです。

期待する挙動でも書かれている通り、この状態を再現するためには、サインアップ済みの利用者が一度ログアウトして予定を作成する必要があります。ログアウトした状態での操作を、ログイン後に復元したいという期待をどのように解決するか決められれば、対応策が何かしら考えられるかと思います。

@e-ikuta
Copy link
Collaborator Author

e-ikuta commented Apr 8, 2024

@kinoppyd
丁寧なご説明ありがとうございます!!!完全に理解しました!🙏🙏🙏

利用者がサインアップした段階では「サインアップ前のPlanを引き継ぐ」もしくは「最初から空のPlanが割り当てられる」かのどちらかです。つまり、サインアップした時点で、そのPlanは利用者が意思を持って自分の作成したプランです。

すみません、私が勘違いしており、「サインアップ前のPlanを引き継ぐ」という挙動ができていないものと思い込んでしまっておりました🙇‍♀
初回サインアップ時に引き継がれるのであれば、私が最も懸念していた、サインアップ前に作成したPlanが初回サインアップ時にリセットされてしまう、ということは起こらないので、今の設計で問題なさそうです!

一方で、

ログアウトした状態での操作を、ログイン後に復元したいという期待

については(nice to haveの範疇かもしれませんが)一定ありそうだなと思いました。
ログイン状態のユーザーが意図的にログアウトしてPlanを作成するケースというのは考えにくいと思うのですが、例えばサインアップしたことのあるユーザーが、他のブラウザや、他の端末で操作した場合に、ログアウトしていることに気づかなくてPlanを作成してしまい、後から気付いてサインアップする可能性がありそうだなと思いました。
その時にログアウト状態に作成したPlanが消えてしまうと、悲しい気持ちになりそう...><

「どのように解決するか」については、復元はしないという仕様はそのままにして、ログアウトしていることに気付いてもらいやすくするのと、仕様が伝わるようにするが手っ取り早いのかな、と思いました。
例えばジャストアイディアですが、スケジュールページで現在ログインしているかログアウトしているかがもっとわかるようなUIにするとか、ログアウト状態で視聴予定に追加しようとしたときに、ダイアログで「一度ログインしたことがある場合はログアウト状態で作成した視聴予定はログイン後に復元しないよ」という注意書きを表示する、とかかな〜と思いました。

@e-ikuta e-ikuta added the enhancement New feature or request label Apr 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants