-
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
提出物未チェックの場合、学習ステータスを修了にできないように変更 #7994
base: main
Are you sure you want to change the base?
Conversation
@mousu-a |
@reckyy 明後日くらいに返せればと思います〜🙏 |
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.
@reckyy
お疲れ様です!
すみません、ちょっと遅れてしまいましたがレビューお待たせいたしました。
コード良い感じだと思います👍
気になるところがいくつかあり、その点コメントさせていただきましたのでご確認ください🙏
1つ目 似たようなバグ?
今回のプルリクは「提出物が確認済みになっていない場合、プラクティスのステータスを修了に変更できないようにする」ということですが、似たようなバグを発見しました。
提出物を提出していない状態でもプラクティスページ下部の「終了条件」にある修了ボタンが押せてしまい、このようなモーダルが出てきてしまいます。
質問
こちらはこのissue(プルリク)の対象外ということでよろしかったでしょうか?(ストーリーとしては似ているのかなと思ってお聞きしました)
2つ目 コミットの粒度に関して
こちらのコミットに関して、コミットの粒度が大きいように感じました🤔
Whatはわかりやすいですが、Whyがわかりづらかった感じです。
レビュアーはレビュイーとは違って(そのプルリクの)専門家ではないので、(そのプルリクの)初心者でもわかるような説明がされているとレビュアー側としてはとても助かるかもです👀(適宜コミットして変更を分割するなど)
すみません、コードは問題ないのですが一応質問のご返答を頂いてからApproveさせていただきますー!
@@ -53,9 +53,9 @@ class ProductTest < ActiveSupport::TestCase | |||
practice: | |||
) | |||
|
|||
status = :complete | |||
status = :started |
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.
このステータスを変更している理由は、このテストの目的から変更先のステータスが「修了」でなくてもいいと判断したからです。
もし修了のままだと、バリデーションを追加した関係で提出物をチェックする行程を追加しないといけなくコストが高くなるからです。
@@ -16,4 +16,9 @@ def delete_most_unassigned_products! | |||
|
|||
products[2..products.size].each(&:delete) | |||
end | |||
|
|||
def create_checked_product(user, practice) |
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.
validation追加の関係で、テストがvalidationに引っかかるものがいくつかあったため対応策として作成しました。
@mousu-a
ありがとうございます!こちらは全く把握していませんでした。確かに同じことが起こっていますね。。
おっしゃる通り、コミットの内容は説明不足なものがあったので説明を追加しました。 ただしコミットの粒度に関して。今回このコミットでは
を行なっていますが、これを分割するということですかね。自分としては関連しているものは一つにまとめるべきという考えですが、いかがでしょうか。👀 @komagata |
説明コメント大変助かります! すみません、「動く状態でコミットする」という視点はすっかり忘れていました。 以下返答になります!
そうです。自分としては
(文はある程度簡略化しています、参考程度に🙏)このくらいやっても良いのかなと思いました。いかがでしょうか。
こちらに関しては、すでにプルリクとして1つのテーマにまとめているので問題はなさそうに思いますがいかがでしょうか👀
「プログラムが動かない」状態でコミットするのは微妙としても、「テストが通らない」状態でコミットするのは問題ないという認識です。 お返事お待ちしております〜! |
@mousu-a
自分はまとめたいな〜と思った理由を後述しています。
今回は修正箇所が軽微でしたが、もし修正箇所が膨大になった場合、読み込むファイルが多くなります。その場合、コミット単位でレビューを行ったり、変更の流れを追ったりする方もいると思います。(自分はそのタイプです)
この点については、少し強めに言わせていただくと、自分は問題があるという認識です👀 |
お早いお返事ありがとうございます!
なるほどです。この視点はありませんでした👀
なるほどです。 ありがとうございます! |
@mousu-a Approveいただきありがとうございます〜。もし追加でバグの修正が生じた場合、再度レビュー依頼させていただきます。 |
すみません、ちょっと代名詞や主語や目的語を省略されている文章が多くて、具体的になんのことをおっしゃっているのかが理解しづらくなっております。 もう少しご説明いただければありがたいです。 |
@komagata 今回のPRは「提出物が確認されていないにも関わらず、学習ステータスを手動で修了にできてしまう」バグの修正です。 この修正により、修了していないプラクティスの他の方の回答が見れないようにすることを目的としていました。 しかし @mousu-a さんより、提出物を作成していない状態でも、以下の画像にある「修了」をクリックすることで、学習ステータスが修了となり、他の方の提出物が見れてしまうことが判明しました。 プラクティスを終了していないのに、学習ステータスの変更で他の人の回答が見れてしまう。 · Issue #7959 は一つ目のバグの修正ではなく、「他の方の提出物を不正に見ることを防ぐ」ことが目的です。そのため、本PR内で修正しても良いかどうか、念のため確認させていただきました。 もし分かりにくいところがあれば、ご指摘いただけますと幸いです。 |
@reckyy なるほどです。ご説明ありがとうございます。
上記の解釈によるとは思いますが、今回は「修了ボタンで修了にできてしまう」の方の修正もお願いできればありがたいです。 |
@komagata (cc: @mousu-a ) 前回のバグの調査の結果まず、こちらのバグですが、認識に誤りがありました。
確かに「修了」をクリックすると学習ステータスは「修了」と表示されます。しかし、このPRで追加したバリデーションが正しく機能しており、他の人の提出物は見れないようになっていました。つまり、見た目上は「修了」となっていますが、内部ではステータスの更新が失敗しています。実際、「修了」をクリックしても他の人の提出物は閲覧できませんでした。 なぜ見た目が変更できてしまうのか
bootcamp/app/javascript/learning.vue Lines 65 to 87 in 049eff4
レスポンスを返す、updateアクションが以下です。 bootcamp/app/controllers/api/practices/learning_controller.rb Lines 17 to 38 in 049eff4
responseが返ってきた時点でステータスをcompleteにしているため、アクションの成功失敗に関係なく文言が変更されてしまっていました。 相談したいことこの状況を改善するために、レスポンスに基づいてステータスをcompleteにするかどうかを分岐するコードを作成しました。
ただし、以下の問題が残っています。
bootcamp/app/javascript/learning.vue Lines 12 to 17 in 049eff4
2024-08-26.16.39.07.movこのモーダルをpushComplete()が成功した場合にのみ表示させる方法が思いつきません。 |
@reckyy モーダルの表示をpushComplete()の結果に紐づけたいわけですよね。 GPTと一緒に考えてみました。 以下のようにやればどうかと考えました。
コードです。必要な部分のみ抜粋しています。 li.card-main-actions__item(v-else)
label#js-complete.a-button.is-sm.is-warning.is-block(
@click='pushComplete',
// forの値に変数をセット
:for='modalFor')
i.fa-solid.fa-check
| 修了
~~~
data() {
return {
// ... 他のプロパティ ...
// forにセットする変数を初期化
modalFor: null,
}
~~~
pushComplete() {
// ... fetch処理 ...
.then((response) => {
// アクションが成功したら値をセット
if (response.ok) {
this.complete = true
this.modalFor = 'modal-learning_completion'
} else {
response.json().then((data) => {
alert(data.error)
})
}
})
.catch((error) => {
console.warn(error)
})
} ですがこれだとモーダルが表示されなくなってしまうんですよね〜...なんでだろう。 |
@mousu-a その方法だと、確かに |
局所的に修正するだけで直すことが前提となっていますが、広範囲に修正する(learning.vue自体を全くの別物に変えてしまっても問題ありません)ことも考慮に入れた上であれば解決できるかもしれません。 本当にギブアップという感じであれば再度おっしゃっていただければと思います。 |
@mousu-a @komagata (cc: @mousu-a ) 無事にモーダルを正しく表示できたため、ご報告させていただきます。 とった修正方法モーダルのコードはこちらになります。 bootcamp/app/views/shared/_modal_learning_completion.html.slim Lines 1 to 19 in 441af9a
さらに、_modal.html.slimの部分は以下です。 bootcamp/app/views/shared/_modal.html.slim Lines 1 to 14 in 441af9a
モーダルの表示切り替えはこの上4行のコードで行われていました。learning.vueのpushComplete()が成功した場合に、inputタグのchecked属性をtrueに設定する処理を追加しました。これにより、学習ステータスが正しく更新された際にのみモーダルが表示されるようにしました。 質問
基本的に影響範囲は少ない方が良いという考えから、局所的な修正を優先していたかもしれません。 |
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.
コード良いと思います!予定にないissueの対応までありがとうございました🙇♂️
こちらからはApproveとさせていただきます〜!
@komagata よろしくお願いいたします。 |
基本的に「自分の関係ある部分・そうでない部分」と考えるのでなく、サイト・コード全体として自然な形(他のプログラマーが見ても迷わない)になるように修正する必要があります。 今回の場合、learning.vueが想定している仕様自体が現状と合わないのであればlearning.vueを丸ごと変えてしまっても問題ないですし、無理なく変更できるのであれば局所的な修正でも構いません。 ギブアップするほど無理があるのであればleaning.vue自体を全部変えてしまっても問題ないという意味になります。 |
product = practice.product(user) | ||
return if product&.checked? |
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.
2回使うのでなければproductという変数を作る意味はないかもです。(1行で良いと思います。)
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.
@reckyy こちらいかがでしょうか?
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
おっしゃる通りです。
変数削除する修正をしたあと、返信させていただこうと思ってました。返信が遅れて申し訳ないです。 🙇
加えて長期間作業できておらず、ご迷惑をおかけしている点も重ねて申し訳ないです。
こちらのPRは一週間以内に作業再開するようにします!
require 'active_decorator_test_case' | ||
|
||
class UserDecoratorTest < ActiveDecoratorTestCase | ||
include ProductHelper |
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.
他の箇所でもincludeとテストやsetupのメソッドは1行開けているので開けた方がいいかなと思います。
@komagata 一点ご相談させていただきたいです。 相談上記PRで、今回修正を行なった |
そちらのPRは今見たらすでにマージされているようですので、作業をお願いします。 |
@komagata
承知しました! |
@reckyy conflictの修正をお願いします。 |
提出物のCheckが済んでいないため、API::Practices::Learning::CompletionMessageController#updateが実行できていなかった。
48b7a07
to
d7071e1
Compare
@komagata |
Issue
概要
表題の通りです。
プラクティスを修了していなくても、他の方の回答が見れてしまうため修正しました。
変更確認方法
bugfix/show-answers-incomplete-practice
をローカルに取り込むhajime
で http://localhost:3000/practices/315059988 にアクセス。Screenshot
変更前
提出物がない状態でも、修了に変更できてしまう。
変更後