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

Discordアカウント名が不正だと退会時にエラーが発生する不具合を修正 #7515

Merged

Conversation

ogawa-tomo
Copy link
Contributor

@ogawa-tomo ogawa-tomo commented Mar 10, 2024

Issue

概要

下記PRで休会から六ヶ月後に自動で退会される機能を実装しましたが、実際には休会から六ヶ月以上経ったユーザーも退会していませんでした。
#6490

原因を調査したところ、ユーザーのDiscordアカウント名が不正なときに退会処理に失敗するようになっていたことが分かりました。退会時に分報チャンネルを削除するとき、ユーザーに紐づくDiscordProfileモデルのtimes_idをnilに更新するのですが、このときにアカウント名が不正だとDiscordProfileモデルのバリデーションに引っかかっていました。
#6490 (comment)

そこで、退会時にDiscordProfileモデルを更新するときは、account_nameのバリデーションを無効にするように変更しました。
問題のバリデーションは下記の場所で定義されており、バリデーションコンテキストに:retirementを指定することで無効化することができます。

with_options if: -> { validation_context != :retirement } do
validates :account_name,
allow_blank: true,
length: {
in: 2..32,
message: 'は2文字以上32文字以内で入力してください。'
}
validate :validate_only_underscore_and_period
validate :no_consecutive_periods
end

ちなみに、Discordアカウント名が不正なユーザーが存在する理由は、下記PRによりアカウント名のバリデーションルールが変更されたことでした。
https://github.com/fjordllc/bootcamp/pull/6855/files#diff-f7b1ee506d31db4da441d303c2f736fcc14e1069bb26bb6e6dc5d20b869df2e1

変更確認方法

Discordのアカウント名が不正かつ六ヶ月以上休会しているユーザーを作成し、六ヶ月以上休会しているユーザーを自動退会させるAPIが正常に動作していることを確認する。

  1. 下記PRのディスクリプションにある「変更確認方法」「準備」の手順に従い、テスト用Discordサーバーの作成、Discord Botの作成、環境変数の設定を行う(このあとの手順で追加の環境変数を設定するのでまだサーバは立ち上げなくてよい)
  2. bug/delete-times-channel-with-invalid-account-name-when-retireをローカルに取り込む
  3. bin/rails db:seedを実行してDBを初期化
  4. ターミナルでコマンドを実行し、環境変数TOKENを適当に設定する(このあとの手順で、六ヶ月以上休会しているユーザを自動退会させるURLを叩くため)
> export TOKEN=hoge
  1. そのままサーバを立ち上げる
  2. ログアウトした状態で参加登録ページから適当な名前(ここではnagai-kyuukai-invalid-discordとする)で参加登録する
  3. テスト用のDiscordサーバーに分報チャンネルが作られていることを確認する
  4. Railsコンソールを操作し、さきほど作成したユーザーの休会日を6ヵ月前にする
> user = User.find_by(login_name: 'nagai-kyuukai-invalid-discord')
> user.update!(hibernated_at: 6.months.ago)
  1. さらに、ユーザーのDiscordアカウント名を不正なもの(#を用いたもの)に変更する
> user.discord_profile.account_name = 'hoge#1234'
> user.discord_profile.save!(validate: false)
  1. komagataでログインしなおし、管理ページの休会ユーザー一覧ページ(/admin/users?target=hibernatedに遷移する。そこにさきほど作成したユーザーがいることを確認する。さらに、休会日が6ヵ月前かつDiscordアカウント名が不正なものになっていることを確認する
    image
    image

  2. また、kyuukai(Kyu Kai)ユーザーがいれば、Railsコンソールを操作し、kyuukai(Kyu Kai)ユーザーを削除しておく

    • ※このユーザーにはダミーのサブスクリプション番号が登録されており、このユーザーを退会させようとすると定期支払い削除処理でエラーになるため
> user = User.find_by(login_name: 'kyuukai')
> user.destroy!
  1. さらに、nagai-kyuukai(Nagai Kyu Kai)ユーザーがいることも確認しておく
  2. 六ヶ月以上休会しているユーザーを自動退会させるURL(http://localhost:3000/scheduler/daily/auto_retire?token=hoge )にブラウザでアクセスし、エラーが出ないことを確認する(画面は真っ白になる)(クエリパラメータに先ほど環境変数に設定したTOKENの値を指定することに注意)
  3. 管理ページをリロードし、nagai-kyuukai-invalid-discordユーザーとnagai-kyuukai(Nagai Kyu Kai)ユーザーが休会ユーザー一覧に表示されておらず、退会ユーザー一覧に表示されることを確認する
  4. nagai-kyuukai-invalid-discordユーザーの分報チャンネルが消えていることを確認する

@ogawa-tomo ogawa-tomo force-pushed the bug/delete-times-channel-with-invalid-account-name-when-retire branch from f22f9f7 to 0a38c4b Compare March 10, 2024 10:30
@ogawa-tomo ogawa-tomo changed the title Discordアカウント名が不正だと退会時に分報チャンネルが削除できない不具合を修正 Discordアカウント名が不正だと退会時にエラーが発生する不具合を修正 Mar 10, 2024
@ogawa-tomo ogawa-tomo force-pushed the bug/delete-times-channel-with-invalid-account-name-when-retire branch from 0a38c4b to 24d56fa Compare March 10, 2024 10:37
@ogawa-tomo ogawa-tomo marked this pull request as ready for review March 13, 2024 12:49
@ogawa-tomo
Copy link
Contributor Author

@natsuto6 こちら、よろしければレビューお願いできますでしょうか?

@Takuya-Sakai91
Copy link
Contributor

@ogawa-tomo
承知しましたー!(ちょうど自分が取り組んでいる#6907で退会動線の確認が取れていなかったので...関連してますね!💡)
1週間ほどで対応させていただければと思います🙏

Copy link
Contributor

@Takuya-Sakai91 Takuya-Sakai91 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ogawa-tomo
動作、コードともに特に問題ないかと思いますので、Approveとさせていただきますー!

@ogawa-tomo
Copy link
Contributor Author

@natsuto6 レビューありがとうございました!

@komagata メンバーのレビューが通りましたので、レビューをお願いします。
また、ステージング環境での動作確認手順について相談させてください。この修正の動作確認をするには、以下の条件を満たすユーザを作成する必要があります。
・分報チャンネルが存在する
・休会日が六ヶ月以上前である
・Discordアカウント名が不正な値である
そのため、動作確認手順としては以下を考えており、手順4番目のDB操作をお願いできればと思っているのですが、このような手順でよろしいでしょうか?

  1. ステージング環境にデプロイ後、適当なユーザで新規登録する
  2. ステージング環境のDiscordサーバに上記のユーザの分報ができていることを確認する
  3. 上記のユーザでログインし、休会する
  4. DBを操作し、上記のユーザの休会日を六ヶ月以上前にし、Discordアカウント名を不正な値にする
UPDATE users SET hibernated_at = '2023-09-01 00:00:00' WHERE id = <ユーザID>;
UPDATE discord_profiles SET account_name = 'hoge#1234' WHERE user_id = <ユーザID>;
  1. https://bootcamp-staging.fjord.jp/scheduler/daily/auto_retire にアクセスし、200レスポンスが返ることを確認する(クエリパラメータにtokenを指定すること)
  2. 上記のユーザが退会していることを確認する
  3. ステージング環境のDiscordサーバから上記のユーザの分報が削除されていることを確認する

@ogawa-tomo ogawa-tomo requested a review from komagata March 17, 2024 11:03
Copy link
Member

@komagata komagata left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

確認させていただきました。OKです~👌

@komagata
Copy link
Member

@ogawa-tomo

そのため、動作確認手順としては以下を考えており、手順4番目のDB操作をお願いできればと思っているのですが、このような手順でよろしいでしょうか?

かしこまりました~

@komagata komagata merged commit 5fd8588 into main Mar 22, 2024
10 checks passed
@komagata komagata deleted the bug/delete-times-channel-with-invalid-account-name-when-retire branch March 22, 2024 05:29
@ogawa-tomo
Copy link
Contributor Author

@komagata こちら、ステージング環境での動作確認を試みているのですが、新規ユーザ登録ページの「参加する」ボタンを押した際に500エラーとなってしまいました。
image
ローカル環境では再現せずでして、原因が掴めずに困っています。こちらの不具合について何か情報をお持ちでしょうか?

@komagata
Copy link
Member

komagata commented Apr 1, 2024

@ogawa-tomo 本当に課金されてしまうのでステージング環境ではカードありのユーザー登録ができなくなっています。

@ogawa-tomo
Copy link
Contributor Author

@komagata なるほどです!
カードなしで登録するため、研修生ユーザとして以下のユーザを登録し、Discordサーバにチャンネルができたことも確認しました。こちらのユーザで動作確認する形でよろしいでしょうか。
https://bootcamp-staging.fjord.jp/users/1060516511

image

よろしければ、こちらのユーザの休会日を六ヶ月以上前にし、Discordアカウント名を不正な値にするため、ステージング環境で以下のSQL実行をお願いできますでしょうか。

UPDATE users SET hibernated_at = '2023-09-01 00:00:00' WHERE id = 1060516511;
UPDATE discord_profiles SET account_name = 'hoge#1234' WHERE user_id = 1060516511;

以下、作業メモ

研修生ユーザとして登録するためには、以下にアクセス(tokenの値はこちら→https://bootcamp.fjord.jp/pages/357
https://bootcamp-staging.fjord.jp/users/new?role=trainee&token={token}

以下のユーザはカード番号が不正かつ休会後6ヵ月が過ぎているため、自動退会処理時にエラーが起こるので、あらかじめ管理ページから退会させておく
autoretire-within-24-hour(autoretire-within-24-hour)
autoretire-within-1-hour(autoretire-within-1-hour)
kyuukai(Kyu Kai)
(カード番号が不正なので退会処理時にエラーが起きて500が返ってくるが、退会処理自体はできている)

@komagata
Copy link
Member

komagata commented Apr 8, 2024

@ogawa-tomo

こちらのユーザで動作確認する形でよろしいでしょうか。

URLのユーザーが存在しませんでした。
ステージング今日ではデプロイされるたびにDBがseedの状態にリセットされるのでそのせいかもです。

@komagata
Copy link
Member

komagata commented Apr 9, 2024

@ogawa-tomo

よろしければ、こちらのユーザの休会日を六ヶ月以上前にし、Discordアカウント名を不正な値にするため、ステージング環境で以下のSQL実行をお願いできますでしょうか。

こちらを含めてseedを使って確認に必要なデータを用意してみてください~

@ogawa-tomo
Copy link
Contributor Author

@komagata こちら、seedを使ってデータを用意するPRを作りましたので、ご確認お願いします 🙇
#7653

@ogawa-tomo
Copy link
Contributor Author

ステージング動作確認 📝

以下のユーザはカード番号が不正かつ休会後6ヵ月が過ぎているため、自動退会処理時にエラーが起こるので、あらかじめ管理ページから操作して退会させておく
autoretire-within-24-hour(autoretire-within-24-hour)
autoretire-within-1-hour(autoretire-within-1-hour)
kyuukai(Kyu Kai)
(カード番号が不正なので退会処理時にエラーが起きて500が返ってくるが、退会処理自体はできている)

nagai-kyuukaiユーザが休会後六ヶ月以上経過しており、分報チャンネル名が不正であり、分報リンクをクリックするとステージング環境Discordサーバ(fjordbootcamp-staging)の「jidoutaikai20240402」チャンネルに遷移することを確認する
image
image

ブラウザで https://bootcamp-staging.fjord.jp//scheduler/daily/auto_retire?token={token} にアクセス
(tokenの値はこちらを参照 https://bootcamp.fjord.jp/pages/357
エラーにならないことを確認

nagai-kyuukaiユーザが退会していることを確認
image

ステージング環境Discordサーバ(fjordbootcamp-staging)の「jidoutaikai20240402」チャンネルが削除されていることを確認
image

@ogawa-tomo
Copy link
Contributor Author

@komagata @komagata
こちら、本番環境での動作確認をお願いします。
休会後六ヶ月以上経過したユーザが自動で退会になっているかを確認していただきたいです。以前はテストアカウントで動作確認をしていたようですが、そのテストアカウントが現在は休会中ではないようなので別のアカウントでの確認をお願いします。
#6490 (comment)

@komagata
Copy link
Member

komagata commented Jul 2, 2024

@ogawa-tomo 本番環境で確認しました~。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants