-
Notifications
You must be signed in to change notification settings - Fork 71
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
ベストアンサー決定通知をactive_delivery化する #6479
ベストアンサー決定通知をactive_delivery化する #6479
Conversation
d354f61
to
2a6435d
Compare
app/mailers/notification_mailer.rb
Outdated
@@ -1,6 +1,6 @@ | |||
# frozen_string_literal: true | |||
|
|||
class NotificationMailer < ApplicationMailer # rubocop:disable Metrics/ClassLength | |||
class NotificationMailer < ApplicationMailer |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
このファイルからメソッドを削除した結果、Rubocopの下記のチェックが通るようになったので削除
app/mailers/notification_mailer.rb:3:1: C: Metrics/ClassLength: Class has too many lines. [103/100]
class NotificationMailer < ApplicationMailer ...
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
def chose_correct_answer | ||
answer = Answer.find(ActiveRecord::FixtureSet.identify(:correct_answer1)) | ||
receiver = User.find(answer.user_id) | ||
|
||
ActivityMailer.with(answer: answer, receiver: receiver).chose_correct_answer | ||
end |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
📝 Action Mailerが提供するメールのプレビュー機能
https://railsguides.jp/action_mailer_basics.html#%E3%83%A1%E3%83%BC%E3%83%AB%E3%81%AE%E3%83%97%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC
こうしておくことで、下記の場所にアクセスするとプレビューが見れる
http://localhost:3000/rails/mailers/activity_mailer/chose_correct_answer
app/mailers/activity_mailer.rb
Outdated
# required params: answer, receiver | ||
def chose_correct_answer | ||
@user = @receiver | ||
@answer = params[:answer] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
既存の他の通知の実装を見ると、paramsだけでなくargsも受け取れるようになっています。
bootcamp/app/mailers/activity_mailer.rb
Lines 53 to 54 in 366840c
def came_answer(args = {}) | |
@answer = params&.key?(:answer) ? params[:answer] : args[:answer] |
ただ、今回は(既存の他の通知でも)、ActivityDeliveryからはparamsを渡す方法でしか呼び出していません。
https://github.com/palkan/active_delivery#parameterized-deliveries
動作を見る限りでもargsを受け取れるようにする必要はなさそうなので、今回はargsを受け取る実装はしていません。
(もし現時点でargsを受け取れるようにすべき理由があればご指摘ください:bow:)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OKです、ではこの箇所に関してはいったんこのままで駒形さんのレビューに回すことにしますね
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ogawa-tomo (CC: @djkazunoko )
同期・非同期どちらでも使えるように他の実装もそうなっているので両方対応でお願いしたいです。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@komagata 一応の確認ですが、ここで問題にしているのは「同期版と非同期版を両方実装すべきか」でなく「args版とparams版を両方実装すべきか」なのですが、他の実装に合わせて両方実装すべきということで合っていますか?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
5/31ミーティング
📝 params版だけだと、同期・非同期の両方に対応することができない
参考:https://api.rubyonrails.org/classes/ActionMailer/Parameterized.html
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
argsによる呼び出しに対応しました
86ec797
assert_difference -> { AbstractNotifier::Testing::Driver.deliveries.count }, 1 do | ||
ActivityDelivery.with(**params).notify!(:chose_correct_answer) | ||
end | ||
|
||
assert_difference -> { AbstractNotifier::Testing::Driver.enqueued_deliveries.count }, 1 do | ||
ActivityDelivery.with(**params).notify(:chose_correct_answer) | ||
end |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
既存の他の通知のテストではパラメータをnotify
メソッドの引数で渡す場合もテストしていますが、下記コメントしたように現時点ではその場合の実装はしていないのでテストも行っていません
#6479 (comment)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
argsによる呼び出しのテストを追加しました
4df77fb
@djkazunoko こちら、よろしければレビューお願いできますでしょうか? |
@ogawa-tomo |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ogawa-tomo
クラス図があってわかりやすかったです🙌
レビュー大変お待たせいたしました🙇♂️
2点コメントさせていただきましたので、ご確認をよろしくお願いします。
@@ -1,5 +1,5 @@ | |||
= render 'notification_mailer_template', | |||
= render '/notification_mailer/notification_mailer_template', | |||
title: "#{@answer.receiver.login_name}さんの質問【 #{@answer.question.title} 】で#{@answer.sender.login_name}さんの回答がベストアンサーが選ばれました。", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
タイポがありました〜
ベストアンサーが
選ばれました。 → ベストアンサーに
選ばれました。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
おお~ありがとうございます!これはどうやら元からですね。
修正しました!
16c8155
test 'not send chose_correct_answer email to user with mail_notification off' do | ||
answer = correct_answers(:correct_answer1) | ||
receiver = answer.user | ||
receiver.update(mail_notification: false) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
update_columnsではなくupdateを使っている理由を教えていただきたいです🙏
どちらを使うべきか自分では判断がつかないんですけど、update_columns
はバリデーション等をスキップするため、update
より高速なのかなと、だから他のテストではupdate_columns
が使われているのかなと考えました!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
とくに深い理由はなく、テストの高速化という観点もありませんでした!
ただ、このファイルの他の箇所ではupdate_columns
を使っていますが、他にこれを使っているテストはtest/system/users_test.rb
くらいで、bootcampリポジトリ全体ではupdate
を使っているテストがほとんどのようです。ここだけ高速化を意識する必要はとくになさそうに感じまして、であれば素直にupdate
を使えばいいのかなと思いました。
(なぜこのファイルの他の箇所でupdate_columns
を使っているのかは自分も分かりません・・・)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ご回答いただきありがとうございます!
bootcampリポジトリ全体ではupdateを使っているテストがほとんどのようです。
なるほど〜、むしろupdate_columns
の方が少数派だったんですね。
どちらが一般的なのかなと思って質問させていただきました。勉強になりました🙇♂️
@djkazunoko レビューありがとうございます!修正・コメントしましたので再度ご確認お願いします:bow: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ogawa-tomo
修正いただきありがとうございます!
自分からはApproveとさせていただきます〜🙌
@komagata こちら、メンバーのレビューが通りましたので、ご確認お願いいたします:bow: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
conflictの修正をお願いします〜
e92fd4a
to
4114313
Compare
@komagata こちら、コンフリクトを修正したうえでCIが通りましたので、ご確認お願いします:bow: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
conflictの解消をお願いします〜
86ec797
to
4df77fb
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
再度conflictの解消をお願いします〜
4df77fb
to
f852fe3
Compare
d564155
to
116ab50
Compare
@komagata 再度コンフリクト解消しましたので、ご確認お願いいたします! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
conflictの修正お願いします〜。
116ab50
to
83d5221
Compare
@komagata 再度コンフリクト解消しましたので、ご確認お願いいたします! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
確認させて頂きました。OKです〜🙆♂️
Issue
概要
ベストアンサー決定通知をactive_delivery化しました。
対象は、メール通知とサイト内通知の2種類です。
チャットの通知は変更していません。
変更確認方法
feature/replace-notification-on-correct-answer-save-with-active-delivery
をローカルに取り込むScreenshot
とくに画面に変更はないので略
やったこと
ベストアンサー決定通知処理の全体像と今回変更した箇所
before
After
参考情報
参考リンク
参考PR
(他にもactive_delivery化のPRは多数あるが略)