Aggiunge i tornei con hub, pagina pubblica e tabellone per semifinali e finali.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-05 15:05:57 +02:00
co-authored by Cursor
parent d52434fb2e
commit a1f4c24a43
124 changed files with 6979 additions and 91 deletions
@@ -0,0 +1,79 @@
module Public
class TournamentPagesController < SiteBaseController
include Public::LiveHelper
layout "marketing_live"
def index
@tournaments = Tournament
.visible_to_public
.with_attached_logo_file
.includes(:club)
.order(starts_on: :desc, name: :asc)
end
def show
@tournament = Tournament.find_by!(slug: params[:slug])
unless @tournament.published? || owner_access?
raise ActiveRecord::RecordNotFound
end
@club = @tournament.club
@owner_preview = !@tournament.published? && owner_access?
@owner_manage = owner_access?
@tab = params[:tab].to_s.presence_in(%w[risultati tabellone]) || "risultati"
load_public_content!
end
private
def owner_access?
logged_in? && @tournament.club.owned_by?(current_user)
end
def load_public_content!
@online_paths = fetch_online_paths
@matches = @tournament.matches
.includes(
:tournament_group,
:tournament_round,
home_participant: { logo_file_attachment: :blob },
away_participant: { logo_file_attachment: :blob }
)
.order(Arel.sql("scheduled_at ASC NULLS LAST"), created_at: :asc)
@live_sessions = StreamSession
.broadcasting
.publicly_listed
.where(platform: "matchlivetv")
.includes(:score_state, match: [:home_participant, :away_participant, { team: :club }])
.where(match_id: @tournament.matches.select(:id))
.order(Arel.sql("started_at DESC NULLS LAST"), created_at: :desc)
@live_by_match_id = @live_sessions.index_by(&:match_id)
@recordings = Recording.ready.publicly_listed
.joins(stream_session: :match)
.where(matches: { tournament_id: @tournament.id })
.includes(stream_session: { match: [:home_participant, :away_participant] })
.order(recorded_at: :desc)
@recording_by_match_id = {}
@recordings.each do |rec|
match_id = rec.stream_session.match_id
@recording_by_match_id[match_id] ||= rec
end
@groups = @tournament.groups.order(:position)
@standings_by_group = @groups.index_with { |group| Tournaments::Standings.call(group) }
@rounds = @tournament.rounds.order(:position)
@matches_by_round = @matches.select { |match| match.tournament_round_id.present? }
.group_by(&:tournament_round_id)
end
def fetch_online_paths
Mediamtx::Client.new.online_path_names
rescue Mediamtx::Client::Error, Errno::ECONNREFUSED, SocketError
[]
end
end
end