33 lines
953 B
Ruby
33 lines
953 B
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module TopicTrackingStatePublishable
|
||
|
extend ActiveSupport::Concern
|
||
|
|
||
|
class_methods do
|
||
|
def publish_read_message(message_type:,
|
||
|
channel_name:,
|
||
|
topic_id:,
|
||
|
user:,
|
||
|
last_read_post_number:,
|
||
|
notification_level: nil)
|
||
|
|
||
|
highest_post_number = DB.query_single(
|
||
|
"SELECT #{user.staff? ? "highest_staff_post_number" : "highest_post_number"} FROM topics WHERE id = ?",
|
||
|
topic_id
|
||
|
).first
|
||
|
|
||
|
message = {
|
||
|
message_type: message_type,
|
||
|
topic_id: topic_id,
|
||
|
payload: {
|
||
|
last_read_post_number: last_read_post_number,
|
||
|
notification_level: notification_level,
|
||
|
highest_post_number: highest_post_number
|
||
|
}
|
||
|
}.as_json
|
||
|
|
||
|
MessageBus.publish(channel_name, message, user_ids: [user.id])
|
||
|
end
|
||
|
end
|
||
|
end
|