2017-04-05 06:16:53 +03:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
class PushUpdateWorker
|
|
|
|
include Sidekiq::Worker
|
2022-01-19 23:37:27 +02:00
|
|
|
include Redisable
|
2017-04-05 06:16:53 +03:00
|
|
|
|
2022-01-19 23:37:27 +02:00
|
|
|
def perform(account_id, status_id, timeline_id = nil, options = {})
|
2022-11-04 14:21:06 +02:00
|
|
|
@status = Status.find(status_id)
|
|
|
|
@account_id = account_id
|
|
|
|
@timeline_id = timeline_id || "timeline:#{account_id}"
|
2022-01-19 23:37:27 +02:00
|
|
|
@options = options.symbolize_keys
|
2017-04-05 06:48:22 +03:00
|
|
|
|
2022-11-04 14:21:06 +02:00
|
|
|
render_payload!
|
2022-01-19 23:37:27 +02:00
|
|
|
publish!
|
2017-04-05 19:48:41 +03:00
|
|
|
rescue ActiveRecord::RecordNotFound
|
|
|
|
true
|
2017-04-05 06:16:53 +03:00
|
|
|
end
|
2022-01-19 23:37:27 +02:00
|
|
|
|
|
|
|
private
|
|
|
|
|
2022-11-04 14:21:06 +02:00
|
|
|
def render_payload!
|
|
|
|
@payload = StatusCacheHydrator.new(@status).hydrate(@account_id)
|
2022-01-19 23:37:27 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
def message
|
|
|
|
Oj.dump(
|
|
|
|
event: update? ? :'status.update' : :update,
|
2023-07-27 17:19:33 +03:00
|
|
|
payload: @payload
|
2022-01-19 23:37:27 +02:00
|
|
|
)
|
|
|
|
end
|
|
|
|
|
|
|
|
def publish!
|
|
|
|
redis.publish(@timeline_id, message)
|
|
|
|
end
|
|
|
|
|
|
|
|
def update?
|
|
|
|
@options[:update]
|
|
|
|
end
|
2017-04-05 06:16:53 +03:00
|
|
|
end
|