Files
MatchLiveTv/backend/db/migrate/20260609100000_multi_sport.rb
Emiliano Frascaro e727069d43 Introduce architettura multi-sport con catalogo, engine scoring e overlay.
Catalogo sport in YAML, board implicito, engine per volley/basket/timed/racket/timer/generic, regia e app Android allineate.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-09 20:11:21 +02:00

53 lines
1.8 KiB
Ruby

# frozen_string_literal: true
class MultiSport < ActiveRecord::Migration[7.2]
def up
rename_column :teams, :sport, :sport_key
rename_column :matches, :sport, :sport_key
change_column_default :teams, :sport_key, from: "volleyball", to: "pallavolo"
change_column_default :matches, :sport_key, from: "volleyball", to: "pallavolo"
execute <<~SQL.squish
UPDATE teams SET sport_key = 'pallavolo' WHERE sport_key = 'volleyball' OR sport_key IS NULL OR sport_key = '';
UPDATE matches SET sport_key = 'pallavolo' WHERE sport_key = 'volleyball' OR sport_key IS NULL OR sport_key = '';
SQL
add_column :matches, :overlay_kind, :string
add_column :score_states, :board_type, :string, null: false, default: "volley"
add_column :score_states, :data, :jsonb, null: false, default: {}
execute <<~SQL.squish
UPDATE matches
SET scoring_rules = scoring_rules || jsonb_build_object('sets_to_win', sets_to_win)
WHERE sets_to_win IS NOT NULL
AND NOT (scoring_rules ? 'sets_to_win');
SQL
execute <<~SQL.squish
UPDATE score_states ss
SET board_type = 'volley'
FROM stream_sessions s
JOIN matches m ON m.id = s.match_id
WHERE ss.stream_session_id = s.id;
SQL
end
def down
execute <<~SQL.squish
UPDATE teams SET sport_key = 'volleyball' WHERE sport_key = 'pallavolo';
UPDATE matches SET sport_key = 'volleyball' WHERE sport_key = 'pallavolo';
SQL
change_column_default :teams, :sport_key, from: "pallavolo", to: "volleyball"
change_column_default :matches, :sport_key, from: "pallavolo", to: "volleyball"
rename_column :teams, :sport_key, :sport
rename_column :matches, :sport_key, :sport
remove_column :matches, :overlay_kind
remove_column :score_states, :board_type
remove_column :score_states, :data
end
end