1
0
مراية لـ https://github.com/postalserver/postal.git تم المزامنة 2026-04-21 06:08:09 +00:00
الملفات
postal/lib/postal/message_db/webhooks.rb
2024-02-10 17:18:22 +00:00

92 أسطر
2.0 KiB
Ruby

# frozen_string_literal: true
module Postal
module MessageDB
class Webhooks
def initialize(database)
@database = database
end
def record(attributes = {})
@database.insert(:webhook_requests, attributes)
end
def list(page)
result = @database.select_with_pagination(:webhook_requests, page, order: :timestamp, direction: "desc")
result[:records] = result[:records].map { |i| Request.new(i) }
result
end
def find(uuid)
request = @database.select(:webhook_requests, where: { uuid: uuid }).first || raise(RequestNotFound, "No request found with UUID '#{uuid}'")
Request.new(request)
end
def prune
return unless last = @database.select(:webhook_requests, where: { timestamp: { less_than: 10.days.ago.to_f } }, order: "timestamp", direction: "desc", limit: 1, fields: ["id"]).first
@database.delete(:webhook_requests, where: { id: { less_than_or_equal_to: last["id"] } })
end
class RequestNotFound < Postal::Error
end
class Request
def initialize(attributes)
@attributes = attributes
end
def [](name)
@attributes[name.to_s]
end
def timestamp
Time.zone.at(@attributes["timestamp"])
end
def event
@attributes["event"]
end
def status_code
@attributes["status_code"]
end
def url
@attributes["url"]
end
def uuid
@attributes["uuid"]
end
def payload
@attributes["payload"]
end
def pretty_payload
@pretty_payload ||= begin
json = JSON.parse(payload)
JSON.pretty_unparse(json)
end
end
def body
@attributes["body"]
end
def attempt
@attributes["attempt"]
end
def will_retry?
@attributes["will_retry"] == 1
end
end
end
end
end