Retrospring/app/workers/share_worker.rb

44 lines
1.7 KiB
Ruby
Raw Normal View History

2022-12-27 13:41:07 -08:00
# frozen_string_literal: true
2014-12-12 14:45:49 -08:00
class ShareWorker
include Sidekiq::Worker
2021-12-25 04:40:21 -08:00
sidekiq_options queue: :share, retry: 5
2014-12-12 14:45:49 -08:00
2014-12-27 08:33:49 -08:00
# @param user_id [Integer] the user id
# @param answer_id [Integer] the user id
2021-12-25 04:40:21 -08:00
# @param service [String] the service to post to
def perform(user_id, answer_id, service)
@user_service = User.find(user_id).services.find_by(type: "Services::#{service.camelize}")
2021-12-25 04:40:21 -08:00
@user_service.post(Answer.find(answer_id))
rescue ActiveRecord::RecordNotFound
logger.info "Tried to post answer ##{answer_id} for user ##{user_id} to #{service.titleize} but the user/answer/service did not exist (likely deleted), will not retry."
# The question to be posted was deleted
rescue Twitter::Error::DuplicateStatus
logger.info "Tried to post answer ##{answer_id} from user ##{user_id} to Twitter but the status was already posted."
rescue Twitter::Error::Forbidden
# User's Twitter account is suspended
logger.info "Tried to post answer ##{answer_id} from user ##{user_id} to Twitter but the account is suspended."
rescue Twitter::Error::Unauthorized
# User's Twitter token has expired or been revoked
2023-01-02 00:36:28 -08:00
logger.info "Tried to post answer ##{answer_id} from user ##{user_id} to Twitter but the token has expired or been revoked."
2023-01-01 14:52:46 -08:00
revoke_and_notify(user_id, service)
rescue => e
logger.info "failed to post answer #{answer_id} to #{service} for user #{user_id}: #{e.message}"
Sentry.capture_exception(e)
raise
end
def revoke_and_notify(user_id, service)
@user_service.destroy
2023-01-02 00:30:51 -08:00
Notification::ServiceTokenExpired.create(
target_id: user_id,
target_type: "User::Expired#{service.camelize}ServiceConnection",
recipient_id: user_id,
new: true
)
2014-12-12 14:45:49 -08:00
end
end