# frozen_string_literal: true

class RemoveAvgTimeFromTopicsPosts < ActiveRecord::Migration[6.0]
  disable_ddl_transaction!

  def up
    # this makes it re-runnable and also works if it was not created initially
    execute <<~SQL
      ALTER TABLE topics DROP COLUMN IF EXISTS avg_time
    SQL

    ActiveRecord::Base.transaction do
      execute "DROP VIEW badge_posts"

      execute <<~SQL
        ALTER TABLE posts DROP COLUMN IF EXISTS avg_time
      SQL

      # we must recreate this view every time we amend posts
      # p.* is auto expanded and persisted into the view definition
      # at create time
      execute <<~SQL
        CREATE VIEW badge_posts AS
        SELECT p.*
        FROM posts p
        JOIN topics t ON t.id = p.topic_id
        JOIN categories c ON c.id = t.category_id
        WHERE c.allow_badges AND
              p.deleted_at IS NULL AND
              t.deleted_at IS NULL AND
              NOT c.read_restricted AND
              t.visible AND
              p.post_type IN (1,2,3)
      SQL
    end
  end

  def down
    # do nothing re-runnable
  end
end
