85 lines
1.8 KiB
Ruby
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
|