Files
redux-scraper/app/models/domain/user/bluesky_user.rb
2025-08-08 00:40:28 +00:00

85 lines
1.8 KiB
Ruby

# typed: strict
class Domain::User::BlueskyUser < Domain::User
aux_table :bluesky
due_timestamp :scanned_profile_at, 1.month
due_timestamp :scanned_posts_at, 1.week
has_created_posts! Domain::Post::BlueskyPost
has_faved_posts! Domain::Post::BlueskyPost
enum :state,
{ ok: "ok", account_disabled: "account_disabled", error: "error" },
prefix: :state
validates :handle, presence: true
validates :did, presence: true
validates :state, presence: true
after_initialize { self.state ||= "ok" if new_record? }
sig { override.returns([String, Symbol]) }
def self.param_prefix_and_attribute
["bsky", :handle]
end
sig { override.returns(String) }
def self.view_prefix
"bsky"
end
sig { override.returns(Domain::DomainType) }
def self.domain_type
Domain::DomainType::Bluesky
end
sig { override.returns(String) }
def description_html_base_domain
"bsky.app"
end
sig { override.returns(String) }
def site_name_for_view
"Bluesky"
end
sig { override.returns(T.nilable(String)) }
def description_html_for_view
description
end
sig { override.returns(T::Array[String]) }
def names_for_search
[display_name, handle].compact
end
sig { override.returns(T.nilable(String)) }
def external_url_for_view
"https://bsky.app/profile/#{did}" if did.present?
end
sig { override.returns(T.nilable(String)) }
def name_for_view
display_name || handle
end
sig { override.returns(String) }
def account_status_for_view
"Active" # TODO: Implement proper status checking
end
sig { returns(String) }
def account_state_for_view
case state
when "ok"
"Ok"
when "account_disabled"
"Disabled"
when "error"
"Error"
else
"Unknown"
end
end
end