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>
This commit is contained in:
52
backend/db/migrate/20260609100000_multi_sport.rb
Normal file
52
backend/db/migrate/20260609100000_multi_sport.rb
Normal file
@@ -0,0 +1,52 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user