# frozen_string_literal: true

class MakeSomeBookmarkColumnsNullable < ActiveRecord::Migration[6.1]
  def up
    change_column_null :bookmarks, :post_id, true
    execute "ALTER TABLE bookmarks ADD CONSTRAINT enforce_post_id_or_bookmarkable CHECK (
      (post_id IS NOT NULL) OR (bookmarkable_id IS NOT NULL AND bookmarkable_type IS NOT NULL)
    )"
  end

  def down
    DB.exec("UPDATE bookmarks SET post_id = bookmarkable_id WHERE bookmarkable_type = 'Post'")
    DB.exec(
      "UPDATE bookmarks SET post_id = (SELECT id FROM posts WHERE topic_id = bookmarkable_id AND post_number = 1), for_topic = TRUE WHERE bookmarkable_type = 'Topic'",
    )
    change_column_null :bookmarks, :post_id, false
    execute "ALTER TABLE bookmarks DROP CONSTRAINT enforce_post_id_or_bookmarkable"
  end
end