mirror of
https://github.com/discourse/discourse.git
synced 2025-02-07 11:58:27 +00:00
We don't need no stinkin' denormalization! This commit ignores the topic_id column on bookmarks, to be deleted at a later date. We don't really need this column and it's better to rely on the post.topic_id as the canonical topic_id for bookmarks, then we don't need to remember to update both columns if the bookmarked post moves to another topic.
33 lines
1.1 KiB
Ruby
33 lines
1.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Jobs
|
|
class SyncTopicUserBookmarked < ::Jobs::Base
|
|
def execute(args = {})
|
|
topic_id = args[:topic_id]
|
|
|
|
DB.exec(<<~SQL, topic_id: topic_id)
|
|
UPDATE topic_users SET bookmarked = true
|
|
FROM bookmarks AS b
|
|
INNER JOIN posts ON posts.id = b.post_id
|
|
WHERE NOT topic_users.bookmarked AND
|
|
posts.deleted_at IS NULL AND
|
|
topic_users.topic_id = posts.topic_id AND
|
|
topic_users.user_id = b.user_id #{topic_id.present? ? "AND topic_users.topic_id = :topic_id" : ""}
|
|
SQL
|
|
|
|
DB.exec(<<~SQL, topic_id: topic_id)
|
|
UPDATE topic_users SET bookmarked = false
|
|
WHERE topic_users.bookmarked AND
|
|
(
|
|
SELECT COUNT(*)
|
|
FROM bookmarks
|
|
INNER JOIN posts ON posts.id = bookmarks.post_id
|
|
WHERE posts.topic_id = topic_users.topic_id
|
|
AND bookmarks.user_id = topic_users.user_id
|
|
AND posts.deleted_at IS NULL
|
|
) = 0 #{topic_id.present? ? "AND topic_users.topic_id = :topic_id" : ""}
|
|
SQL
|
|
end
|
|
end
|
|
end
|