FIX: Join bookmarks migration on users to avoid missing user records

FIX: Join bookmarks migration on users to avoid missing user records

  • the post_actions table has no FK to users, so if a user has been deleted we may end up with dangling post_action records, which then interferes with the bookmarks migration because bookmarks DO have an FK to users
diff --git a/db/migrate/20200409033412_create_bookmarks_from_post_action_bookmarks.rb b/db/migrate/20200409033412_create_bookmarks_from_post_action_bookmarks.rb
index 092a0e7..57b1885 100644
--- a/db/migrate/20200409033412_create_bookmarks_from_post_action_bookmarks.rb
+++ b/db/migrate/20200409033412_create_bookmarks_from_post_action_bookmarks.rb
@@ -16,6 +16,7 @@ class CreateBookmarksFromPostActionBookmarks < ActiveRecord::Migration[6.0]
         INNER JOIN posts ON posts.id = post_actions.post_id
         LEFT JOIN bookmarks ON bookmarks.post_id = post_actions.post_id AND bookmarks.user_id = post_actions.user_id
         INNER JOIN topics ON topics.id = posts.topic_id
+        INNER JOIN users ON users.id = post_actions.user_id
         WHERE bookmarks.id IS NULL AND post_action_type_id = :type_id AND post_actions.deleted_at IS NULL AND posts.deleted_at IS NULL
         LIMIT 2000
         SQL
diff --git a/lib/tasks/bookmarks.rake b/lib/tasks/bookmarks.rake
index d3cf545..87fe005 100644
--- a/lib/tasks/bookmarks.rake
+++ b/lib/tasks/bookmarks.rake
@@ -22,6 +22,7 @@ task "bookmarks:sync_to_table" => :environment do |_t, args|
         INNER JOIN posts ON posts.id = post_actions.post_id
         LEFT JOIN bookmarks ON bookmarks.post_id = post_actions.post_id AND bookmarks.user_id = post_actions.user_id
         INNER JOIN topics ON topics.id = posts.topic_id
+        INNER JOIN users ON users.id = post_actions.user_id
         WHERE bookmarks.id IS NULL AND post_action_type_id = :type_id AND post_actions.deleted_at IS NULL AND posts.deleted_at IS NULL
         LIMIT 2000
       SQL

GitHub sha: 779dc30d