# frozen_string_literal: true class CreateReviewables < ActiveRecord::Migration[5.2] def change create_table :reviewables do |t| t.string :type, null: false t.integer :status, null: false, default: 0 t.integer :created_by_id, null: false # Who can review this item? Moderators always can t.boolean :reviewable_by_moderator, null: false, default: false t.integer :reviewable_by_group_id, null: true # On some high traffic sites they want things in review to be claimed # so that two people don't work on the same thing. t.integer :claimed_by_id, null: true # For filtering t.integer :category_id, null: true t.integer :topic_id, null: true t.float :score, null: false, default: 0 t.boolean :potential_spam, null: false, default: false # Polymorphic relation of reviewable thing t.integer :target_id, null: true t.string :target_type, null: true t.integer :target_created_by_id, null: true t.json :payload, null: true # Helps us prevent simultaneous updates t.integer :version, null: false, default: 0 t.datetime :latest_score, null: true t.timestamps end add_index :reviewables, :status add_index :reviewables, %i[status type] add_index :reviewables, %i[status score] add_index :reviewables, %i[type target_id], unique: true end end