feat: implement Bluesky scan posts job and enhance user scanning

- Add new ScanPostsJob for scanning Bluesky posts
- Enhance ScanUserJob with improved error handling and logging
- Update BlueskyPost model with new fields and validation
- Add auxiliary tables for Bluesky posts
- Improve job base classes with better color logging
- Update specs with proper HTTP mocking patterns
- Add factory for BlueskyPost testing
This commit is contained in:
Dylan Knutson
2025-08-10 18:41:01 +00:00
parent 5c71fc6b15
commit eba4b58666
20 changed files with 796 additions and 548 deletions

View File

@@ -848,61 +848,6 @@ class Domain::Post::BlueskyPost
sig { void }
def at_uri_will_change!; end
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
def bluesky_created_at; end
sig { params(value: T.nilable(::ActiveSupport::TimeWithZone)).returns(T.nilable(::ActiveSupport::TimeWithZone)) }
def bluesky_created_at=(value); end
sig { returns(T::Boolean) }
def bluesky_created_at?; end
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
def bluesky_created_at_before_last_save; end
sig { returns(T.untyped) }
def bluesky_created_at_before_type_cast; end
sig { returns(T::Boolean) }
def bluesky_created_at_came_from_user?; end
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
def bluesky_created_at_change; end
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
def bluesky_created_at_change_to_be_saved; end
sig do
params(
from: T.nilable(::ActiveSupport::TimeWithZone),
to: T.nilable(::ActiveSupport::TimeWithZone)
).returns(T::Boolean)
end
def bluesky_created_at_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
def bluesky_created_at_in_database; end
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
def bluesky_created_at_previous_change; end
sig do
params(
from: T.nilable(::ActiveSupport::TimeWithZone),
to: T.nilable(::ActiveSupport::TimeWithZone)
).returns(T::Boolean)
end
def bluesky_created_at_previously_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
def bluesky_created_at_previously_was; end
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
def bluesky_created_at_was; end
sig { void }
def bluesky_created_at_will_change!; end
sig { returns(T.nilable(::String)) }
def bluesky_rkey; end
@@ -1736,9 +1681,6 @@ class Domain::Post::BlueskyPost
sig { void }
def restore_at_uri!; end
sig { void }
def restore_bluesky_created_at!; end
sig { void }
def restore_bluesky_rkey!; end
@@ -1817,12 +1759,6 @@ class Domain::Post::BlueskyPost
sig { returns(T::Boolean) }
def saved_change_to_at_uri?; end
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
def saved_change_to_bluesky_created_at; end
sig { returns(T::Boolean) }
def saved_change_to_bluesky_created_at?; end
sig { returns(T.nilable([T.nilable(::String), T.nilable(::String)])) }
def saved_change_to_bluesky_rkey; end
@@ -2260,9 +2196,6 @@ class Domain::Post::BlueskyPost
sig { returns(T::Boolean) }
def will_save_change_to_at_uri?; end
sig { returns(T::Boolean) }
def will_save_change_to_bluesky_created_at?; end
sig { returns(T::Boolean) }
def will_save_change_to_bluesky_rkey?; end

View File

@@ -733,61 +733,6 @@ class DomainPostsBlueskyAux
sig { void }
def base_table_id_will_change!; end
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
def bluesky_created_at; end
sig { params(value: T.nilable(::ActiveSupport::TimeWithZone)).returns(T.nilable(::ActiveSupport::TimeWithZone)) }
def bluesky_created_at=(value); end
sig { returns(T::Boolean) }
def bluesky_created_at?; end
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
def bluesky_created_at_before_last_save; end
sig { returns(T.untyped) }
def bluesky_created_at_before_type_cast; end
sig { returns(T::Boolean) }
def bluesky_created_at_came_from_user?; end
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
def bluesky_created_at_change; end
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
def bluesky_created_at_change_to_be_saved; end
sig do
params(
from: T.nilable(::ActiveSupport::TimeWithZone),
to: T.nilable(::ActiveSupport::TimeWithZone)
).returns(T::Boolean)
end
def bluesky_created_at_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
def bluesky_created_at_in_database; end
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
def bluesky_created_at_previous_change; end
sig do
params(
from: T.nilable(::ActiveSupport::TimeWithZone),
to: T.nilable(::ActiveSupport::TimeWithZone)
).returns(T::Boolean)
end
def bluesky_created_at_previously_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
def bluesky_created_at_previously_was; end
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
def bluesky_created_at_was; end
sig { void }
def bluesky_created_at_will_change!; end
sig { returns(T.nilable(::String)) }
def bluesky_rkey; end
@@ -1379,9 +1324,6 @@ class DomainPostsBlueskyAux
sig { void }
def restore_base_table_id!; end
sig { void }
def restore_bluesky_created_at!; end
sig { void }
def restore_bluesky_rkey!; end
@@ -1445,12 +1387,6 @@ class DomainPostsBlueskyAux
sig { returns(T::Boolean) }
def saved_change_to_base_table_id?; end
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
def saved_change_to_bluesky_created_at; end
sig { returns(T::Boolean) }
def saved_change_to_bluesky_created_at?; end
sig { returns(T.nilable([T.nilable(::String), T.nilable(::String)])) }
def saved_change_to_bluesky_rkey; end
@@ -1759,9 +1695,6 @@ class DomainPostsBlueskyAux
sig { returns(T::Boolean) }
def will_save_change_to_base_table_id?; end
sig { returns(T::Boolean) }
def will_save_change_to_bluesky_created_at?; end
sig { returns(T::Boolean) }
def will_save_change_to_bluesky_rkey?; end

View File

@@ -4,6 +4,10 @@ class DIDKit::Resolver
sig { params(handle: String).returns(T.nilable(DIDKit::DID)) }
def resolve_handle(handle)
end
sig { params(did: String).returns(DIDKit::Document) }
def resolve_did(did)
end
end
class DIDKit::DID
@@ -11,3 +15,9 @@ class DIDKit::DID
def did
end
end
class DIDKit::Document
sig { returns(T.nilable(String)) }
def get_validated_handle
end
end