Files
redux-scraper/app/jobs/domain/bluesky/job/base.rb

91 lines
2.4 KiB
Ruby

# typed: strict
class Domain::Bluesky::Job::Base < Scraper::JobBase
abstract!
include HasBulkEnqueueJobs
queue_as :bluesky
discard_on ActiveJob::DeserializationError
sig { override.returns(Symbol) }
def self.http_factory_method
:get_generic_http_client
end
protected
sig { params(user: Domain::User::BlueskyUser).void }
def enqueue_scan_posts_job_if_due(user)
if user.posts_scan.due? || force_scan?
logger.info(
format_tags(
"enqueue posts scan",
make_tags(posts_scan: user.posts_scan.ago_in_words),
),
)
defer_job(Domain::Bluesky::Job::ScanPostsJob, { user: })
else
logger.info(
format_tags(
"skipping enqueue of posts scan",
make_tags(scanned_at: user.posts_scan.ago_in_words),
),
)
end
end
sig { params(user: Domain::User::BlueskyUser).void }
def enqueue_scan_user_job_if_due(user)
if user.profile_scan.due? || force_scan?
logger.info(
format_tags(
"enqueue user scan",
make_tags(profile_scan: user.profile_scan.ago_in_words),
),
)
defer_job(Domain::Bluesky::Job::ScanUserJob, { user: })
else
logger.info(
format_tags(
"skipping enqueue of user scan",
make_tags(scanned_at: user.profile_scan.ago_in_words),
),
)
end
end
sig { returns(T.nilable(Domain::User::BlueskyUser)) }
def user_from_args
if (user = arguments[0][:user]).is_a?(Domain::User::BlueskyUser)
user
elsif (did = arguments[0][:did]).present?
Domain::User::BlueskyUser.find_or_create_by(did:) do |user|
resolver = DIDKit::Resolver.new
if (resolved = resolver.resolve_did(did))
user.handle = resolved.get_validated_handle
end
end
elsif (handle = arguments[0][:handle]).present?
resolver = DIDKit::Resolver.new
did = resolver.resolve_handle(handle)&.did
fatal_error("failed to resolve handle: #{handle}") if did.nil?
user = Domain::User::BlueskyUser.find_or_initialize_by(did:)
user.handle = handle
user.save!
user
else
nil
end
end
sig { returns(Domain::User::BlueskyUser) }
def user_from_args!
T.must(user_from_args)
end
sig { params(user: Domain::User::BlueskyUser).returns(T::Boolean) }
def buggy_user?(user)
# Add any known problematic handles/DIDs here
false
end
end