32 lines
736 B
Ruby
32 lines
736 B
Ruby
module NostrManager
|
|
class FetchLatestEvent < NostrManagerService
|
|
|
|
def initialize(relays:, filter:, max_events: 2)
|
|
@relays = relays
|
|
@filter = filter
|
|
@max_events = max_events
|
|
end
|
|
|
|
def call
|
|
received_events = 0
|
|
events = []
|
|
|
|
@relays.each do |url|
|
|
event = NostrManager::FetchEvent.call(filter: @filter, relay_url: url)
|
|
|
|
if event.present?
|
|
events << event if events.none? { |e| e["id"] == event["id"] }
|
|
received_events += 1
|
|
end
|
|
|
|
if received_events >= @max_events
|
|
Rails.logger.debug "Found #{@max_events} events, ending the search"
|
|
break
|
|
end
|
|
end
|
|
|
|
events.min_by { |e| e["created_at"] }
|
|
end
|
|
end
|
|
end
|