Files
MatchLiveTv/backend/app/services/recordings/finalize_session.rb
Emiliano Frascaro 74eee24293 Completa modulo Replay: S3, retention, sync YouTube e gestione società.
Streaming chunked da Garage, purge con delete YouTube, privacy sincronizzata,
archivio club migliorato, retention 30/90 separata da stato abbonamento.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-08 09:33:59 +02:00

52 lines
1.4 KiB
Ruby

module Recordings
class FinalizeSession
def initialize(session)
@session = session
end
def call
team = @session.match.team
return unless team.entitlements.can_create_recordings?
retention_days = team.entitlements.recording_retention_days
expires_at = retention_days.positive? ? retention_days.days.from_now : nil
recording = Recording.find_or_initialize_by(stream_session: @session)
recording.assign_attributes(
team: team,
status: "processing",
title: default_title,
privacy_status: privacy_from_session,
storage_path: @session.mediamtx_path_name,
recorded_at: @session.ended_at || Time.current,
expires_at: expires_at,
error_message: nil,
metadata: initial_metadata(team)
)
recording.save!
recording
end
private
def default_title
match = @session.match
"#{match.team.name} vs #{match.opponent_name}"
end
def privacy_from_session
@session.privacy_status == "public" ? "public" : "unlisted"
end
def initial_metadata(team)
ent = team.entitlements
{
"source_platform" => @session.platform,
"session_privacy" => @session.privacy_status,
"auto_publish_youtube" => ent.premium_full? && ent.youtube_enabled? && @session.platform == "youtube",
"ai" => {}
}
end
end
end