def seed_plan!(slug, name, features, stripe_price_id: nil) plan = Plan.find_or_initialize_by(slug: slug) plan.name = name plan.features = features plan.stripe_price_id = stripe_price_id if stripe_price_id.present? plan.save! end legacy = Plan.find_by(slug: "premium") if legacy && !Plan.exists?(slug: "premium_full") legacy.update!(slug: "premium_full", name: "Premium Full") end seed_plan!("free", "Free", { "max_staff_transmission" => 1, "max_staff_regia" => 1, "concurrent_streams_limit" => 1, "platforms" => %w[matchlivetv], "recordings_enabled" => false, "recording_days" => 0, "phone_download_enabled" => false, "youtube_enabled" => false, "youtube_mode" => nil }) seed_plan!("premium_light", "Premium Light", { "max_staff_transmission" => 5, "max_staff_regia" => 5, "concurrent_streams_limit" => 3, "platforms" => %w[matchlivetv youtube], "recordings_enabled" => true, "recording_days" => 30, "phone_download_enabled" => true, "youtube_enabled" => true, "youtube_mode" => "matchlivetv_light" }, stripe_price_id: ENV["STRIPE_PREMIUM_LIGHT_PRICE_ID"].presence) seed_plan!("premium_full", "Premium Full", { "max_staff_transmission" => nil, "max_staff_regia" => nil, "concurrent_streams_limit" => 10, "platforms" => %w[matchlivetv youtube facebook twitch], "recordings_enabled" => true, "recording_days" => 90, "phone_download_enabled" => true, "youtube_enabled" => true, "youtube_mode" => "team" }, stripe_price_id: ENV["STRIPE_PREMIUM_FULL_PRICE_ID"].presence || ENV["STRIPE_PREMIUM_PRICE_ID"].presence) Subscription.joins(:plan).where(plans: { slug: "premium_full" }).find_each do |sub| next if sub.plan.slug == "premium_full" sub.update!(plan: Plan["premium_full"]) end puts "Plans: #{Plan.pluck(:slug).join(', ')}"