Permette titolo, testo e link diversi per Android e iOS negli avvisi.

Separa i canali app e mostra il nodo ingest nelle sessioni admin.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-20 16:09:04 +02:00
co-authored by Cursor
parent 43d5003de8
commit a07f231417
24 changed files with 366 additions and 69 deletions
@@ -11,7 +11,8 @@ module Admin
kind: "info",
severity: "info",
status: "draft",
show_on_app: true,
show_on_android: true,
show_on_ios: true,
show_on_web_public: true,
show_on_web_private: true,
dismissible: true
@@ -55,12 +56,18 @@ module Admin
params.require(:app_announcement).permit(
:kind, :severity, :status, :title, :body,
:action_url, :action_label, :dismissible, :starts_at, :ends_at,
:show_on_app, :show_on_web_public, :show_on_web_private
:show_on_android, :show_on_ios, :show_on_web_public, :show_on_web_private,
:android_title, :android_body, :android_action_url, :android_action_label,
:ios_title, :ios_body, :ios_action_url, :ios_action_label
).tap do |permitted|
%i[dismissible show_on_app show_on_web_public show_on_web_private].each do |key|
%i[dismissible show_on_android show_on_ios show_on_web_public show_on_web_private].each do |key|
permitted[key] = ActiveModel::Type::Boolean.new.cast(permitted[key])
end
%i[starts_at ends_at action_url action_label].each do |key|
%i[
starts_at ends_at action_url action_label
android_title android_body android_action_url android_action_label
ios_title ios_body ios_action_url ios_action_label
].each do |key|
permitted[key] = nil if permitted[key].blank?
end
end
@@ -5,7 +5,7 @@ module Admin
@host = HostMetrics.new.sample!
@active_sessions = StreamSession
.where(status: DashboardStats::ACTIVE_STATUSES)
.includes(match: :team)
.includes(:stream_node, match: :team)
.order(started_at: :desc)
@teams = Team.includes(:matches).order(:name).limit(8)
end
@@ -1,11 +1,11 @@
module Admin
class SessionsController < Admin::BaseController
def index
@sessions = StreamSession.includes(:match, :user).order(created_at: :desc).limit(50)
@sessions = StreamSession.includes(:stream_node, :user, match: :team).order(created_at: :desc).limit(50)
end
def show
@session = StreamSession.find(params[:id])
@session = StreamSession.includes(:stream_node, match: :team).find(params[:id])
@events = @session.stream_events.recent.limit(50)
end
@@ -5,7 +5,7 @@ module Api
def index
platform = params[:platform].to_s.presence
announcements = AppAnnouncement.for_app.newest
announcements = AppAnnouncement.for_platform(platform).newest
render json: announcements.map { |item| item.as_api_json(platform: platform) }
end
end