mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-09-21 07:26:15 +08:00
113 lines
4.2 KiB
Ruby
113 lines
4.2 KiB
Ruby
|
class AddExperimentLevel < ActiveRecord::Migration
|
||
|
def up
|
||
|
# Create experiments table
|
||
|
create_table :experiments do |t|
|
||
|
t.string :name, null: false
|
||
|
t.text :description
|
||
|
t.integer :project_id, null: false
|
||
|
t.integer :created_by_id, null: false
|
||
|
t.integer :updated_by_id, null: false
|
||
|
t.boolean :archived, null: false, default: false
|
||
|
t.integer :archived_by_id
|
||
|
t.datetime :archived_on
|
||
|
t.integer :restored_by_id
|
||
|
t.datetime :restored_on
|
||
|
|
||
|
t.timestamps null: false
|
||
|
end
|
||
|
add_foreign_key :experiments, :users, column: :created_by_id
|
||
|
add_foreign_key :experiments, :users, column: :updated_by_id
|
||
|
add_foreign_key :experiments, :users, column: :archived_by_id
|
||
|
add_foreign_key :experiments, :users, column: :restored_by_id
|
||
|
add_index :experiments, :name
|
||
|
add_index :experiments, :project_id
|
||
|
add_index :experiments, :created_by_id
|
||
|
add_index :experiments, :updated_by_id
|
||
|
add_index :experiments, :archived_by_id
|
||
|
add_index :experiments, :restored_by_id
|
||
|
|
||
|
add_column :my_modules, :experiment_id, :integer, default: 0
|
||
|
add_column :my_module_groups, :experiment_id, :integer, default: 0
|
||
|
|
||
|
# Iterate through all projects
|
||
|
Project.find_each do |project|
|
||
|
my_modules = MyModule.where('project_id = ?', project.id)
|
||
|
my_module_groups = MyModuleGroup.where('project_id = ?', project.id)
|
||
|
|
||
|
if my_modules.count > 0
|
||
|
# Create an experiment
|
||
|
owner = project.user_projects.where(role: 0).first.user
|
||
|
exp = Experiment.create(
|
||
|
name: 'Test experiment',
|
||
|
project: project,
|
||
|
created_by: owner,
|
||
|
updated_by: owner
|
||
|
)
|
||
|
|
||
|
# Assign all modules onto new experiment
|
||
|
my_modules.find_each do |mm|
|
||
|
mm.update_column(:experiment_id, exp.id)
|
||
|
end
|
||
|
|
||
|
if my_module_groups.count > 0
|
||
|
# Also assign all module groups onto new experiment
|
||
|
my_module_groups.find_each do |mmg|
|
||
|
mmg.update_column(:experiment_id, exp.id)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
change_column_null :my_modules, :experiment_id, false
|
||
|
remove_column :my_modules, :project_id
|
||
|
add_foreign_key :my_modules, :experiments, column: :experiment_id
|
||
|
add_index :my_modules, :experiment_id
|
||
|
|
||
|
change_column_null :my_module_groups, :experiment_id, false
|
||
|
remove_column :my_module_groups, :project_id
|
||
|
add_foreign_key :my_module_groups, :experiments, column: :experiment_id
|
||
|
add_index :my_module_groups, :experiment_id
|
||
|
end
|
||
|
|
||
|
def down
|
||
|
add_column :my_modules, :project_id, :integer, default: 0
|
||
|
add_column :my_module_groups, :project_id, :integer, default: 0
|
||
|
|
||
|
# Update reference to projects from modules
|
||
|
MyModule.find_each do |mm|
|
||
|
exp = Experiment.where('id = ?', mm[:experiment_id]).take
|
||
|
project = Project.where('id = ?', exp[:project_id]).take
|
||
|
mm.update_column(:project_id, project.id)
|
||
|
end
|
||
|
|
||
|
# Update reference to projects from module groups
|
||
|
MyModuleGroup.find_each do |mmg|
|
||
|
exp = Experiment.where('id = ?', mmg[:experiment_id]).take
|
||
|
project = Project.where('id = ?', exp[:project_id]).take
|
||
|
mmg.update_column(:project_id, project.id)
|
||
|
end
|
||
|
|
||
|
change_column_null :my_modules, :project_id, false
|
||
|
remove_index :my_modules, column: :experiment_id
|
||
|
remove_foreign_key :my_modules, column: :experiment_id
|
||
|
remove_column :my_modules, :experiment_id
|
||
|
change_column_null :my_module_groups, :project_id, false
|
||
|
remove_index :my_module_groups, column: :experiment_id
|
||
|
remove_foreign_key :my_module_groups, column: :experiment_id
|
||
|
remove_column :my_module_groups, :experiment_id
|
||
|
|
||
|
# Drop experiments table
|
||
|
remove_index :experiments, column: :name
|
||
|
remove_index :experiments, column: :project_id
|
||
|
remove_index :experiments, column: :created_by_id
|
||
|
remove_index :experiments, column: :updated_by_id
|
||
|
remove_index :experiments, column: :archived_by_id
|
||
|
remove_index :experiments, column: :restored_by_id
|
||
|
remove_foreign_key :experiments, column: :created_by_id
|
||
|
remove_foreign_key :experiments, column: :updated_by_id
|
||
|
remove_foreign_key :experiments, column: :archived_by_id
|
||
|
remove_foreign_key :experiments, column: :restored_by_id
|
||
|
drop_table :experiments
|
||
|
end
|
||
|
end
|