gitlab-org--gitlab-foss/db/post_migrate/20200701070435_add_default_...

56 lines
1.5 KiB
Ruby

# frozen_string_literal: true
class AddDefaultValueStreamToGroupsWithGroupStages < ActiveRecord::Migration[6.0]
include Gitlab::Database::MigrationHelpers
DOWNTIME = false
disable_ddl_transaction!
class Group < ActiveRecord::Base
def self.find_sti_class(typename)
if typename == 'Group'
Group
else
super
end
end
self.table_name = 'namespaces'
has_many :group_value_streams
has_many :group_stages
end
class GroupValueStream < ActiveRecord::Base
self.table_name = 'analytics_cycle_analytics_group_value_streams'
has_many :group_stages
belongs_to :group
end
class GroupStage < ActiveRecord::Base
self.table_name = 'analytics_cycle_analytics_group_stages'
belongs_to :group_value_stream
end
def up
Group.where(type: 'Group').joins(:group_stages).distinct.find_each do |group|
Group.transaction do
group_value_stream = group.group_value_streams.first_or_create!(name: 'default')
group.group_stages.update_all(group_value_stream_id: group_value_stream.id)
end
end
change_column_null :analytics_cycle_analytics_group_stages, :group_value_stream_id, false
end
def down
change_column_null :analytics_cycle_analytics_group_stages, :group_value_stream_id, true
GroupValueStream.where(name: 'default').includes(:group_stages).find_each do |value_stream|
GroupValueStream.transaction do
value_stream.group_stages.update_all(group_value_stream_id: nil)
value_stream.destroy!
end
end
end
end