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>
29 lines
775 B
Ruby
29 lines
775 B
Ruby
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
|