Sito marketing, SEO, legal, live programmata e branding Match Live Tv.

Logo e favicon nel header, partite programmate su web e mobile, reset password,
pagine FAQ/sitemap, privacy/termini GDPR e icona Android «Match Live Tv».

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-05-26 23:17:15 +02:00
parent 3a5649f482
commit 471291b2c4
70 changed files with 1601 additions and 153 deletions

View File

@@ -2,6 +2,27 @@ class Match < ApplicationRecord
belongs_to :team
has_many :stream_sessions, dependent: :destroy
ACTIVE_SESSION_STATUSES = %w[live connecting reconnecting paused].freeze
validates :opponent_name, presence: true
validates :sets_to_win, numericality: { greater_than: 0, less_than: 6 }
scope :scheduled_upcoming, -> {
where.not(scheduled_at: nil).where("scheduled_at >= ?", Time.current)
}
scope :search_teams_or_opponents, lambda { |query|
q = query.to_s.strip
return all if q.blank?
term = "%#{sanitize_sql_like(q)}%"
joins(:team).where(
"teams.name ILIKE :term OR matches.opponent_name ILIKE :term",
term: term
)
}
def broadcast_active?
stream_sessions.where(status: ACTIVE_SESSION_STATUSES).exists?
end
end