99 行
3.4 KiB
Ruby
99 行
3.4 KiB
Ruby
class EnhanceMaterialManagement < ActiveRecord::Migration[8.0]
|
|
def up
|
|
change_table :materials, bulk: true do |t|
|
|
t.integer :version_no, null: false, default: 1
|
|
t.datetime :file_suppressed_at
|
|
t.references :file_suppressed_by_user, foreign_key: { to_table: :users }
|
|
t.string :file_suppression_reason
|
|
end
|
|
|
|
change_table :material_versions, bulk: true do |t|
|
|
t.string :event_type
|
|
t.string :tag_name
|
|
t.string :tag_category
|
|
t.json :export_paths_json
|
|
t.bigint :file_blob_id
|
|
t.string :file_filename
|
|
t.string :file_content_type
|
|
t.bigint :file_byte_size
|
|
t.string :file_checksum
|
|
t.string :file_sha256
|
|
t.datetime :file_suppressed_at
|
|
t.string :file_suppression_reason
|
|
end
|
|
|
|
execute <<~SQL.squish
|
|
UPDATE material_versions
|
|
SET event_type = CASE
|
|
WHEN version_no = 1 THEN 'create'
|
|
ELSE 'update'
|
|
END
|
|
WHERE event_type IS NULL
|
|
SQL
|
|
|
|
change_column_null :material_versions, :event_type, false
|
|
add_index :material_versions, :file_blob_id
|
|
|
|
add_check_constraint :material_versions,
|
|
"event_type IN ('create', 'update', 'discard', 'restore', 'suppress')",
|
|
name: 'material_versions_event_type_valid'
|
|
|
|
create_table :material_export_items do |t|
|
|
t.references :material, null: false, foreign_key: true
|
|
t.string :profile, null: false, default: 'legacy_drive'
|
|
t.string :export_path, null: false
|
|
t.boolean :enabled, null: false, default: true
|
|
t.references :created_by_user, foreign_key: { to_table: :users }
|
|
t.timestamps
|
|
|
|
t.index [:profile, :export_path], unique: true
|
|
t.index [:material_id, :profile], unique: true
|
|
end
|
|
|
|
create_table :material_import_blocks do |t|
|
|
t.string :match_kind, null: false
|
|
t.string :sha256
|
|
t.string :external_path_pattern
|
|
t.string :reason, null: false
|
|
t.text :note
|
|
t.references :created_by_user, foreign_key: { to_table: :users }
|
|
t.timestamps
|
|
end
|
|
|
|
execute <<~SQL.squish
|
|
UPDATE materials
|
|
SET version_no = COALESCE(
|
|
(SELECT MAX(material_versions.version_no)
|
|
FROM material_versions
|
|
WHERE material_versions.material_id = materials.id),
|
|
1)
|
|
SQL
|
|
end
|
|
|
|
def down
|
|
drop_table :material_import_blocks
|
|
drop_table :material_export_items
|
|
|
|
remove_check_constraint :material_versions, name: 'material_versions_event_type_valid'
|
|
|
|
remove_index :material_versions, :file_blob_id
|
|
remove_column :material_versions, :event_type
|
|
remove_column :material_versions, :tag_name
|
|
remove_column :material_versions, :tag_category
|
|
remove_column :material_versions, :export_paths_json
|
|
remove_column :material_versions, :file_blob_id
|
|
remove_column :material_versions, :file_filename
|
|
remove_column :material_versions, :file_content_type
|
|
remove_column :material_versions, :file_byte_size
|
|
remove_column :material_versions, :file_checksum
|
|
remove_column :material_versions, :file_sha256
|
|
remove_column :material_versions, :file_suppressed_at
|
|
remove_column :material_versions, :file_suppression_reason
|
|
|
|
remove_reference :materials, :file_suppressed_by_user, foreign_key: { to_table: :users }
|
|
remove_column :materials, :version_no
|
|
remove_column :materials, :file_suppressed_at
|
|
remove_column :materials, :file_suppression_reason
|
|
end
|
|
end
|