From 820d31b3e5271d76b8fc40f90cdf3f31f97a0ce4 Mon Sep 17 00:00:00 2001 From: Christophe Robillard Date: Sat, 14 Mar 2026 16:35:48 +0100 Subject: [PATCH] replace mood mode string with mode ref --- app/assets/stylesheets/kluk.css | 25 ---------------- app/helpers/moods_helper.rb | 10 +++++-- app/models/mood.rb | 1 + app/services/mood_calendar_service.rb | 17 ++++------- app/views/moods/index.html.erb | 6 ++-- ...ce_mood_mode_string_with_mode_reference.rb | 30 +++++++++++++++++++ db/schema.rb | 6 ++-- 7 files changed, 51 insertions(+), 44 deletions(-) create mode 100644 db/migrate/20260314150724_replace_mood_mode_string_with_mode_reference.rb diff --git a/app/assets/stylesheets/kluk.css b/app/assets/stylesheets/kluk.css index fb807ba..659dea5 100644 --- a/app/assets/stylesheets/kluk.css +++ b/app/assets/stylesheets/kluk.css @@ -86,31 +86,6 @@ main { height: 15px; } -.creatif { - background-color: red; -} - -.unknown { - border: 2px double grey; - background-color: white; -} - -.en-charge { - background-color: orange; -} - -.frigo-vide { - background-color: grey; -} - -.croisiere { - background-color: green; -} - -.afond { - background-color: black; -} - .info { margin: 30px; } diff --git a/app/helpers/moods_helper.rb b/app/helpers/moods_helper.rb index 0c04021..6a49c77 100644 --- a/app/helpers/moods_helper.rb +++ b/app/helpers/moods_helper.rb @@ -1,9 +1,15 @@ module MoodsHelper def mode_for(mood, user) if user.guess? - mood[:mode] || mood[:guess] || "unknown" + mood[:mode] || mood[:guess] || { label: "unknown", color: "white" } else - mood[:mode] || "unknown" + mood[:mode] || { label: "unknown", color: "white" } end end + + def style_for_mode(mode) + style = "background-color: #{mode[:color]};" + style += " border: 2px double grey;" if mode[:label] == "unknown" + style + end end diff --git a/app/models/mood.rb b/app/models/mood.rb index 2b6a392..c065440 100644 --- a/app/models/mood.rb +++ b/app/models/mood.rb @@ -1,3 +1,4 @@ class Mood < ApplicationRecord belongs_to :user + belongs_to :mode end diff --git a/app/services/mood_calendar_service.rb b/app/services/mood_calendar_service.rb index 04553bb..bb54b97 100644 --- a/app/services/mood_calendar_service.rb +++ b/app/services/mood_calendar_service.rb @@ -2,10 +2,10 @@ class MoodCalendarService def self.generate_calendar(moods, start_date: nil, end_date: Date.current) # Convertir la relation ActiveRecord en tableau de hash - data = moods.order(:recorded_at) - .pluck(:mode, :recorded_at) - .map { |mode, recorded_at| { mode: mode, recorded_at: recorded_at } } - + data = moods.joins(:mode) + .order(:recorded_at) + .pluck(:recorded_at, "modes.label", "modes.color") + .map { |recorded_at, label, color| { mode: { label: label, color: color }, recorded_at: recorded_at } } if data.empty? start_date = Date.current @@ -43,28 +43,21 @@ class MoodCalendarService # Regrouper par mois avec semaines commençant au premier lundi complete_data.group_by { |d| d[:recorded_at].to_date.beginning_of_month } .map do |month_start, month_data| - # Trouver le premier lundi du mois (à partir du 1er du mois) first_monday = month_start first_monday = first_monday.next_occurring(:monday) unless first_monday.monday? - # Trouver le premier lundi du mois SUIVANT next_month_start = month_start.next_month.beginning_of_month next_first_monday = next_month_start next_first_monday = next_first_monday.next_occurring(:monday) unless next_first_monday.monday? - # Le dernier jour du mois est le dimanche précédant le premier lundi du mois suivant month_end = next_first_monday - 1.day - # Créer un hash pour accès rapide aux données de complete_data (qui contient déjà les guess) data_hash = complete_data.index_by { |d| d[:recorded_at].to_date } - # Générer tous les jours du premier lundi jusqu'au dimanche avant le prochain lundi all_days = (first_monday..month_end).map do |date| - # Utiliser directement les données de complete_data qui ont déjà le bon guess data_hash[date] || { mode: nil, recorded_at: date.to_datetime, guess: nil } end - # Grouper par semaines weeks = all_days.group_by { |d| d[:recorded_at].to_date.beginning_of_week(:monday) } .sort_by { |week_start, _| week_start } .map { |_, week_moods| week_moods } @@ -75,4 +68,4 @@ class MoodCalendarService } end end -end +end# diff --git a/app/views/moods/index.html.erb b/app/views/moods/index.html.erb index 1d5cf5e..5e0bc10 100644 --- a/app/views/moods/index.html.erb +++ b/app/views/moods/index.html.erb @@ -2,7 +2,7 @@
- <%= image_tag(@user.current_mode + ".jpg", "data-mood-target": "image") %> + <%= image_tag(@user.current_mode.label + ".jpg", "data-mood-target": "image") %>
@@ -36,7 +36,7 @@
- Aujourd'hui : <%= @user.current_mode %> + Aujourd'hui : <%= @user.current_mode.label %>
@@ -49,7 +49,7 @@
<% week.each do |mood| %> <% mode = mode_for(mood, @user) %> -
" data-mode="<%= mode %>" data-day="<%= l mood[:recorded_at].to_date %>" data-action="click->mood#updateDayInfo" title="<%= l(mood[:recorded_at].to_date) %> : <%= mode %>" class="day <%= mode %>">
+
" data-mode="<%= mode[:label] %>" data-day="<%= l mood[:recorded_at].to_date %>" data-action="click->mood#updateDayInfo" title="<%= l(mood[:recorded_at].to_date) %> : <%= mode[:label] %>" class="day" style="<%= style_for_mode(mode) %>">
<% end %>
<% end %> diff --git a/db/migrate/20260314150724_replace_mood_mode_string_with_mode_reference.rb b/db/migrate/20260314150724_replace_mood_mode_string_with_mode_reference.rb new file mode 100644 index 0000000..fac40bd --- /dev/null +++ b/db/migrate/20260314150724_replace_mood_mode_string_with_mode_reference.rb @@ -0,0 +1,30 @@ +class ReplaceMoodModeStringWithModeReference < ActiveRecord::Migration[8.0] + def up + # 1. Ajouter la colonne de référence + add_reference :moods, :mode, foreign_key: true + + # 2. Pour chaque mood, trouver ou créer le Mode correspondant + Mood.find_each do |mood| + next if mood.mode.blank? + + mode_record = Mode.find_or_create_by!(label: mood.mode, user_id: mood.user_id) do |m| + m.color = "#000000" # couleur par défaut + end + + mood.update_column(:mode_id, mode_record.id) + end + + # 3. Supprimer l'ancienne colonne string + remove_column :moods, :mode, :string + end + + def down + add_column :moods, :mode, :string + + Mood.find_each do |mood| + mood.update_column(:mode, mood.mode&.label) + end + + remove_reference :moods, :mode, foreign_key: true + end +end diff --git a/db/schema.rb b/db/schema.rb index c9c1891..71684c4 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[8.0].define(version: 2026_03_14_144625) do +ActiveRecord::Schema[8.0].define(version: 2026_03_14_150724) do create_table "modes", force: :cascade do |t| t.string "label" t.string "color" @@ -21,11 +21,12 @@ ActiveRecord::Schema[8.0].define(version: 2026_03_14_144625) do end create_table "moods", force: :cascade do |t| - t.string "mode" t.datetime "recorded_at" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.integer "user_id" + t.integer "mode_id" + t.index ["mode_id"], name: "index_moods_on_mode_id" t.index ["user_id"], name: "index_moods_on_user_id" end @@ -62,6 +63,7 @@ ActiveRecord::Schema[8.0].define(version: 2026_03_14_144625) do end add_foreign_key "modes", "users" + add_foreign_key "moods", "modes" add_foreign_key "moods", "users" add_foreign_key "rfid_tags", "users" add_foreign_key "sessions", "users"