From b493870943e7d0d966bc898c6f79a57ca8451fe7 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Tue, 13 Jan 2026 19:48:53 +0530 Subject: [PATCH] feat: backfill preferences --- ...340_migrate_captain_feature_preferences.rb | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 db/migrate/20260113141340_migrate_captain_feature_preferences.rb diff --git a/db/migrate/20260113141340_migrate_captain_feature_preferences.rb b/db/migrate/20260113141340_migrate_captain_feature_preferences.rb new file mode 100644 index 000000000..97ee9ec1b --- /dev/null +++ b/db/migrate/20260113141340_migrate_captain_feature_preferences.rb @@ -0,0 +1,50 @@ +class MigrateCaptainFeaturePreferences < ActiveRecord::Migration[7.1] + def up + migrate_label_suggestion_from_hooks + migrate_audio_transcriptions + end + + def down + # Revert captain_features['audio_transcription'] back to audio_transcriptions + Account.find_each do |account| + captain_features = account.settings['captain_features'] + next unless captain_features&.[]('audio_transcription') == true + next if account.settings.key?('audio_transcriptions') + + account.settings = account.settings.merge('audio_transcriptions' => true) + account.save(validate: false) + end + + # NOTE: We cannot reliably revert label_suggestion back to OpenAI hook settings + end + + private + + def migrate_label_suggestion_from_hooks + Integrations::Hook.where(app_id: 'openai', status: :enabled).find_each do |hook| + next unless hook.settings['label_suggestion'] == true + + account = Account.find_by(id: hook.account_id) + next unless account + + update_captain_feature(account, 'label_suggestion', true) + end + end + + def migrate_audio_transcriptions + Account.where.not("settings->>'audio_transcriptions' IS NULL").find_each do |account| + next unless account.settings['audio_transcriptions'] == true + + update_captain_feature(account, 'audio_transcription', true) + end + end + + def update_captain_feature(account, feature_key, value) + captain_features = account.settings['captain_features'] || {} + return if captain_features.key?(feature_key) + + captain_features[feature_key] = value + account.settings = account.settings.merge('captain_features' => captain_features) + account.save(validate: false) + end +end