class Webhook::IssueCreateClient include Webhook::Client attr_accessor :webhook, :issue, :sender attr_accessor :webhook_task def initialize(webhook, issue, sender) @webhook = webhook @issue = issue @sender = sender # 创建webhook task @webhook_task = Gitea::WebhookTask.create( hook_id: @webhook.id, uuid: SecureRandom.uuid, payload_content: payload_content, event_type: "issues", is_delivered: true ) # 构建client参数 super({ uuid: @webhook_task.uuid, event: "issues", http_method: @webhook.http_method, content_type: @webhook.content_type, url: @webhook.url, secret: @webhook.secret, payload_content: @webhook_task.read_attribute_before_type_cast("payload_content") }) end def do_request request_content, response_content = super @webhook_task.update_attributes({ delivered: Time.now.to_i * 1000000000, is_succeed: response_content["status"] < 300, request_content: request_content, response_content: response_content }) end def payload_content { "action": "opened", "number": @issue.project_issues_index, "issue": JSON.parse(@issue.to_builder.target!), "project": JSON.parse(@issue.project.to_builder.target!), "sender": JSON.parse(@sender.to_builder.target!) } end end