56 lines
1.5 KiB
Ruby
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
|