[Rails] Site internet de la World Tartiflette Tour.
Cleaned up scores controller and tartiflette scoring service.
Changed files
app/controllers/scores_controller.rb
@@ -1,24 +1,12 @@
1
1
class ScoresController < ApplicationController
2
2
allow_unauthenticated_access
3
Removed:
before_action :set_tartiflette, only: [ :new, :create, :edit_all, :update_all ]
4
Removed:
before_action :scores_params, only: [ :create, :update_all ]
3
Added:
before_action :set_tartiflette, only: [:new, :create, :edit_all, :update_all]
5
4
6
5
def new
7
6
end
8
7
9
8
def create
10
Removed:
if TartifletteScoringService.scored?(@tartiflette, session)
11
Removed:
redirect_to root_path, alert: "Vous avez déja noté cette tartiflette."
12
Removed:
return
13
Removed:
end
14
Removed:
15
Removed:
TartifletteScoringService.submit_scores(@tartiflette, scores_params, session)
16
Removed:
redirect_to root_path,
17
Removed:
notice: "Vos scores pour la tartiflette #{@tartiflette.scoring_id} ont été enregistrés."
18
Removed:
rescue StandardError => e
19
Removed:
redirect_to root_path,
20
Removed:
status: :unprocessable_entity,
21
Removed:
alert: "Erreur lors de l'enregistrement de vos scores : #{e.message}"
9
Added:
handle_scoring(:submit_scores, "enregistrement")
22
10
end
23
11
24
12
def edit_all
@@ -26,15 +14,7 @@
26
14
end
27
15
28
16
def update_all
29
Removed:
scores_params.each do |score_id, score_params|
30
Removed:
score = @tartiflette.scores.find(score_id)
31
Removed:
score.update!(value: score_params[:value])
32
Removed:
end
33
Removed:
redirect_to root_path,
34
Removed:
notice: "Vos scores pour la tartiflette #{@tartiflette.scoring_id} ont été mis à jour."
35
Removed:
rescue StandardError => e
36
Removed:
redirect_to root_path,
37
Removed:
alert: "Erreur lors de l'enregistrement de vos scores : #{e.message}"
17
Added:
handle_scoring(:update_scores, "mise à jour")
38
18
end
39
19
40
20
private
@@ -45,5 +25,16 @@
45
25
46
26
def scores_params
47
27
params.require(:scores).permit!.to_h
28
Added:
end
29
Added:
30
Added:
def handle_scoring(service_method, action)
31
Added:
TartifletteScoringService.send(service_method, @tartiflette, scores_params, session)
32
Added:
redirect_to root_path, notice: "Vos scores pour la tartiflette #{@tartiflette.scoring_id} ont été #{action}."
33
Added:
rescue StandardError => e
34
Added:
handle_error("Erreur lors de #{action} de vos scores : #{e.message}")
35
Added:
end
36
Added:
37
Added:
def handle_error(message)
38
Added:
redirect_to root_path, status: :unprocessable_entity, alert: message
48
39
end
49
40
end
app/models/score.rb
@@ -3,4 +3,9 @@
3
3
belongs_to :scoring_criterium
4
4
5
5
validates :value, presence: true, inclusion: { in: 1..5 }
6
Added:
validates :session_id, presence: true
7
Added:
validates :tartiflette_id, uniqueness: {
8
Added:
scope: [:scoring_criterium_id, :session_id],
9
Added:
message: "has already been scored for this session and criterium."
10
Added:
}
6
11
end
app/services/tartiflette_scoring_service.rb
@@ -1,24 +1,35 @@
1
1
class TartifletteScoringService
2
2
def self.scored?(tartiflette, session)
3
Added:
session[:scored_tartiflettes] ||= []
3
4
session[:scored_tartiflettes]&.include?(tartiflette.id)
4
5
end
5
6
6
7
def self.mark_as_scored(tartiflette, session)
7
8
session[:scored_tartiflettes] ||= []
8
Removed:
unless scored?(tartiflette, session)
9
Removed:
session[:scored_tartiflettes] << tartiflette.id
10
Removed:
end
9
Added:
session[:scored_tartiflettes] << tartiflette.id unless scored?(tartiflette, session)
11
10
end
12
11
13
12
def self.submit_scores(tartiflette, scores, session)
14
Removed:
scores.each do |criterium_id, value|
13
Added:
scores.each do |criterium_id, score_params|
15
14
Score.create!(
15
Added:
session_id: session.id,
16
16
tartiflette: tartiflette,
17
17
scoring_criterium_id: criterium_id,
18
Removed:
value: value[:value]
18
Added:
value: score_params[:value]
19
19
)
20
20
end
21
21
mark_as_scored(tartiflette, session)
22
Added:
rescue ActiveRecord::RecordInvalid => e
23
Added:
raise StandardError, "Failed to create score: #{e.message}"
24
Added:
end
25
Added:
26
Added:
def self.update_scores(tartiflette, scores, session)
27
Added:
scores.each do |score_id, score_params|
28
Added:
score = tartiflette.scores.find(score_id)
29
Added:
score.update!(value: score_params[:value])
30
Added:
end
31
Added:
rescue ActiveRecord::RecordInvalid => e
32
Added:
raise StandardError, "Failed to update score: #{e.message}"
22
33
end
23
34
24
35
def self.average_score(tartiflette)