Migliora sessioni admin e rende robusto il logout web.
Aggiunge filtri/colonne (società, orari) e dettaglio leggibile; evita 422 CSRF su logout e non cancella le cover slate custom in sync prod. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
module Admin
|
||||
class AuthController < Admin::BaseController
|
||||
skip_before_action :require_admin_login, only: %i[new create]
|
||||
# Same as public logout: tolerate stale CSRF after long-lived admin tabs.
|
||||
skip_before_action :verify_authenticity_token, only: :destroy
|
||||
|
||||
def new
|
||||
redirect_to admin_root_path if admin_logged_in?
|
||||
|
||||
@@ -1,12 +1,23 @@
|
||||
module Admin
|
||||
class SessionsController < Admin::BaseController
|
||||
def index
|
||||
@sessions = StreamSession.includes(:stream_node, :user, match: :team).order(created_at: :desc).limit(50)
|
||||
@filters = session_filters
|
||||
scope = filtered_sessions
|
||||
@total_count = scope.count
|
||||
@sessions = scope
|
||||
.includes(:stream_node, :user, match: { team: :club })
|
||||
.order(Arel.sql("COALESCE(stream_sessions.started_at, stream_sessions.created_at) DESC"))
|
||||
.limit(100)
|
||||
@clubs = Club.order(:name)
|
||||
@nodes = StreamNode.order(:slug)
|
||||
end
|
||||
|
||||
def show
|
||||
@session = StreamSession.includes(:stream_node, match: :team).find(params[:id])
|
||||
@events = @session.stream_events.recent.limit(50)
|
||||
@session = StreamSession
|
||||
.includes(:stream_node, :user, :device_states, :recording, match: { team: :club })
|
||||
.find(params[:id])
|
||||
@events = @session.stream_events.recent.limit(100)
|
||||
@club = @session.match.team.club
|
||||
end
|
||||
|
||||
def stop
|
||||
@@ -39,5 +50,66 @@ module Admin
|
||||
regia_expires_at: @session.regia_token_expires_at&.iso8601
|
||||
}
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def session_filters
|
||||
{
|
||||
q: params[:q].to_s.strip.presence,
|
||||
status: params[:status].to_s.strip.presence,
|
||||
platform: params[:platform].to_s.strip.presence,
|
||||
club_id: params[:club_id].to_s.strip.presence,
|
||||
stream_node_id: params[:stream_node_id].to_s.strip.presence,
|
||||
from: params[:from].to_s.strip.presence,
|
||||
to: params[:to].to_s.strip.presence
|
||||
}
|
||||
end
|
||||
|
||||
def filtered_sessions
|
||||
scope = StreamSession.left_outer_joins(match: { team: :club })
|
||||
|
||||
if @filters[:q].present?
|
||||
term = "%#{ActiveRecord::Base.sanitize_sql_like(@filters[:q])}%"
|
||||
scope = scope.where(
|
||||
"teams.name ILIKE :term OR matches.opponent_name ILIKE :term OR clubs.name ILIKE :term OR matches.location ILIKE :term",
|
||||
term: term
|
||||
)
|
||||
end
|
||||
|
||||
if @filters[:status].present? && StreamSession::STATUSES.include?(@filters[:status])
|
||||
scope = scope.where(stream_sessions: { status: @filters[:status] })
|
||||
end
|
||||
if @filters[:platform].present? && StreamSession::PLATFORMS.include?(@filters[:platform])
|
||||
scope = scope.where(stream_sessions: { platform: @filters[:platform] })
|
||||
end
|
||||
if @filters[:club_id].present?
|
||||
scope = scope.where(teams: { club_id: @filters[:club_id] })
|
||||
end
|
||||
if @filters[:stream_node_id].present?
|
||||
scope = scope.where(stream_sessions: { stream_node_id: @filters[:stream_node_id] })
|
||||
end
|
||||
if (from_time = parse_filter_date(@filters[:from], end_of_day: false))
|
||||
scope = scope.where(
|
||||
"COALESCE(stream_sessions.started_at, stream_sessions.created_at) >= ?",
|
||||
from_time
|
||||
)
|
||||
end
|
||||
if (to_time = parse_filter_date(@filters[:to], end_of_day: true))
|
||||
scope = scope.where(
|
||||
"COALESCE(stream_sessions.started_at, stream_sessions.created_at) <= ?",
|
||||
to_time
|
||||
)
|
||||
end
|
||||
scope
|
||||
end
|
||||
|
||||
def parse_filter_date(value, end_of_day:)
|
||||
return nil if value.blank?
|
||||
|
||||
date = Date.parse(value)
|
||||
end_of_day ? date.end_of_day : date.beginning_of_day
|
||||
rescue ArgumentError, TypeError
|
||||
nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user