Files
gitlabhq/lib/gitlab/background_migration/skip_company_onboarding_step.rb
2025-01-07 18:35:14 +00:00

48 lines
1.4 KiB
Ruby

# frozen_string_literal: true
module Gitlab
module BackgroundMigration
class SkipCompanyOnboardingStep < BatchedMigrationJob
operation_name :skip_company_onboarding_step
feature_category :onboarding
class UserDetail < ApplicationRecord
self.table_name = :user_details
belongs_to :user
end
def perform
new_step_url = "#{Gitlab.config.gitlab.url}/users/sign_up/groups/new"
onboarding_status = UserDetail.arel_table[:onboarding_status]
registration_type_missing =
Arel::Nodes::NamedFunction.new(
'jsonb_exists',
[onboarding_status, Arel::Nodes.build_quoted('registration_type')]
).not
json_path = '$.step_url ? (@ like_regex ".*\/users\/sign_up\/company\/new.*")'
company_step_url_exists = Arel::Nodes::NamedFunction.new(
'jsonb_path_exists',
[onboarding_status, Arel::Nodes.build_quoted(json_path)]
)
each_sub_batch do |sub_batch|
UserDetail
.where(user: eligible_users(sub_batch))
.where(registration_type_missing)
.where(company_step_url_exists)
.update_all("onboarding_status = onboarding_status || jsonb_build_object('step_url', '#{new_step_url}')")
end
end
private
def eligible_users(sub_batch)
sub_batch.where(onboarding_in_progress: true)
end
end
end
end