Cleaned up scores controller and tartiflette scoring service.

Commit
e5bf7d1527491af4663c203ec17697e8855b650f
Author
Marius Peter <marius.peter@tutanota.com>
Author date
Committer
Marius Peter <marius.peter@tutanota.com>
Committer date
Changed files
app/controllers/scores_controller.rb
index 8d494e4a..8754b91e 100644..100644
@@ -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
index 5147ce06..ccc795f3 100644..100644
@@ -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
index 3514eb14..2c12025b 100644..100644
@@ -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)