create migration to link share visibility directly with users
Also: * remove share visibilities where the shareable is already deleted * remove share visibilities where the user doesn't exist * remove `created_at` and `updated_at` to make the table smaller
This commit is contained in:
parent
75c3e6068c
commit
9657810208
2 changed files with 74 additions and 11 deletions
|
|
@ -0,0 +1,65 @@
|
||||||
|
class LinkShareVisibilitiesWithUser < ActiveRecord::Migration
|
||||||
|
def up
|
||||||
|
cleanup_deleted_share_visibilities
|
||||||
|
|
||||||
|
remove_columns :share_visibilities, :created_at, :updated_at
|
||||||
|
add_column :share_visibilities, :user_id, :integer
|
||||||
|
|
||||||
|
ShareVisibility.joins("INNER JOIN contacts ON share_visibilities.contact_id = contacts.id")
|
||||||
|
.update_all("share_visibilities.user_id = contacts.user_id")
|
||||||
|
|
||||||
|
remove_foreign_key :share_visibilities, name: :post_visibilities_contact_id_fk
|
||||||
|
|
||||||
|
remove_index :share_visibilities, name: :index_post_visibilities_on_contact_id
|
||||||
|
remove_index :share_visibilities, name: :shareable_and_contact_id
|
||||||
|
remove_index :share_visibilities, name: :shareable_and_hidden_and_contact_id
|
||||||
|
|
||||||
|
remove_column :share_visibilities, :contact_id
|
||||||
|
change_column :share_visibilities, :user_id, :integer, null: false
|
||||||
|
|
||||||
|
ShareVisibility.joins("LEFT OUTER JOIN users ON users.id = share_visibilities.user_id")
|
||||||
|
.delete_all("users.id is NULL")
|
||||||
|
|
||||||
|
add_index :share_visibilities, :user_id
|
||||||
|
add_index :share_visibilities, %i(shareable_id shareable_type user_id), name: :shareable_and_user_id
|
||||||
|
add_index :share_visibilities, %i(shareable_id shareable_type hidden user_id),
|
||||||
|
name: :shareable_and_hidden_and_user_id
|
||||||
|
|
||||||
|
add_foreign_key :share_visibilities, :users, name: :share_visibilities_user_id_fk, on_delete: :cascade
|
||||||
|
end
|
||||||
|
|
||||||
|
def down
|
||||||
|
add_column :share_visibilities, :contact_id, :integer
|
||||||
|
|
||||||
|
ShareVisibility.joins("INNER JOIN contacts ON share_visibilities.user_id = contacts.user_id")
|
||||||
|
.update_all("share_visibilities.contact_id = contacts.id")
|
||||||
|
|
||||||
|
remove_foreign_key :share_visibilities, name: :share_visibilities_user_id_fk
|
||||||
|
|
||||||
|
remove_index :share_visibilities, :user_id
|
||||||
|
remove_index :share_visibilities, name: :shareable_and_user_id
|
||||||
|
remove_index :share_visibilities, name: :shareable_and_hidden_and_user_id
|
||||||
|
|
||||||
|
remove_column :share_visibilities, :user_id
|
||||||
|
change_column :share_visibilities, :contact_id, :integer, null: false
|
||||||
|
|
||||||
|
add_index :share_visibilities, :contact_id, name: :index_post_visibilities_on_contact_id
|
||||||
|
add_index :share_visibilities, %i(shareable_id shareable_type contact_id), name: :shareable_and_contact_id
|
||||||
|
add_index :share_visibilities, %i(shareable_id shareable_type hidden contact_id),
|
||||||
|
name: :shareable_and_hidden_and_contact_id
|
||||||
|
|
||||||
|
add_foreign_key :share_visibilities, :contacts, name: :post_visibilities_contact_id_fk, on_delete: :cascade
|
||||||
|
|
||||||
|
add_column :share_visibilities, :created_at, :datetime
|
||||||
|
add_column :share_visibilities, :updated_at, :datetime
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def cleanup_deleted_share_visibilities
|
||||||
|
ShareVisibility.joins("LEFT OUTER JOIN posts ON posts.id = share_visibilities.shareable_id")
|
||||||
|
.where(shareable_type: "Post").delete_all("posts.id is NULL")
|
||||||
|
ShareVisibility.joins("LEFT OUTER JOIN photos ON photos.id = share_visibilities.shareable_id")
|
||||||
|
.where(shareable_type: "Photo").delete_all("photos.id is NULL")
|
||||||
|
end
|
||||||
|
end
|
||||||
14
db/schema.rb
14
db/schema.rb
|
|
@ -11,7 +11,7 @@
|
||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(version: 20151210213023) do
|
ActiveRecord::Schema.define(version: 20160225232049) do
|
||||||
|
|
||||||
create_table "account_deletions", force: :cascade do |t|
|
create_table "account_deletions", force: :cascade do |t|
|
||||||
t.string "diaspora_handle", limit: 255
|
t.string "diaspora_handle", limit: 255
|
||||||
|
|
@ -543,17 +543,15 @@ ActiveRecord::Schema.define(version: 20151210213023) do
|
||||||
|
|
||||||
create_table "share_visibilities", force: :cascade do |t|
|
create_table "share_visibilities", force: :cascade do |t|
|
||||||
t.integer "shareable_id", limit: 4, null: false
|
t.integer "shareable_id", limit: 4, null: false
|
||||||
t.datetime "created_at", null: false
|
|
||||||
t.datetime "updated_at", null: false
|
|
||||||
t.boolean "hidden", default: false, null: false
|
t.boolean "hidden", default: false, null: false
|
||||||
t.integer "contact_id", limit: 4, null: false
|
|
||||||
t.string "shareable_type", limit: 60, default: "Post", null: false
|
t.string "shareable_type", limit: 60, default: "Post", null: false
|
||||||
|
t.integer "user_id", limit: 4, null: false
|
||||||
end
|
end
|
||||||
|
|
||||||
add_index "share_visibilities", ["contact_id"], name: "index_post_visibilities_on_contact_id", using: :btree
|
add_index "share_visibilities", ["shareable_id", "shareable_type", "hidden", "user_id"], name: "shareable_and_hidden_and_user_id", using: :btree
|
||||||
add_index "share_visibilities", ["shareable_id", "shareable_type", "contact_id"], name: "shareable_and_contact_id", using: :btree
|
add_index "share_visibilities", ["shareable_id", "shareable_type", "user_id"], name: "shareable_and_user_id", using: :btree
|
||||||
add_index "share_visibilities", ["shareable_id", "shareable_type", "hidden", "contact_id"], name: "shareable_and_hidden_and_contact_id", using: :btree
|
|
||||||
add_index "share_visibilities", ["shareable_id"], name: "index_post_visibilities_on_post_id", using: :btree
|
add_index "share_visibilities", ["shareable_id"], name: "index_post_visibilities_on_post_id", using: :btree
|
||||||
|
add_index "share_visibilities", ["user_id"], name: "index_share_visibilities_on_user_id", using: :btree
|
||||||
|
|
||||||
create_table "simple_captcha_data", force: :cascade do |t|
|
create_table "simple_captcha_data", force: :cascade do |t|
|
||||||
t.string "key", limit: 40
|
t.string "key", limit: 40
|
||||||
|
|
@ -679,5 +677,5 @@ ActiveRecord::Schema.define(version: 20151210213023) do
|
||||||
add_foreign_key "ppid", "users"
|
add_foreign_key "ppid", "users"
|
||||||
add_foreign_key "profiles", "people", name: "profiles_person_id_fk", on_delete: :cascade
|
add_foreign_key "profiles", "people", name: "profiles_person_id_fk", on_delete: :cascade
|
||||||
add_foreign_key "services", "users", name: "services_user_id_fk", on_delete: :cascade
|
add_foreign_key "services", "users", name: "services_user_id_fk", on_delete: :cascade
|
||||||
add_foreign_key "share_visibilities", "contacts", name: "post_visibilities_contact_id_fk", on_delete: :cascade
|
add_foreign_key "share_visibilities", "users", name: "share_visibilities_user_id_fk", on_delete: :cascade
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue