47 lines
1.4 KiB
Ruby
47 lines
1.4 KiB
Ruby
class Public::Api::V1::Captain::WebhooksController < ActionController::API
|
|
def inter_pix
|
|
Rails.logger.info "[Captain::InterWebhook] 🔔 Received Webhook: #{params.to_unsafe_h}"
|
|
|
|
# Inter sends an array of "pix" objects
|
|
pix_events = params[:pix] || []
|
|
|
|
pix_events.each do |event|
|
|
txid = event[:txid]
|
|
next unless txid
|
|
|
|
charge = ::Captain::PixCharge.find_by(txid: txid)
|
|
|
|
if charge
|
|
Rails.logger.info "[Captain::InterWebhook] ✅ Found Charge for TXID: #{txid}"
|
|
|
|
# Update Charge
|
|
charge.update!(
|
|
status: 'paid',
|
|
paid_at: Time.current,
|
|
raw_webhook_payload: event.to_json
|
|
)
|
|
|
|
# Update Reservation
|
|
reservation = charge.reservation
|
|
if reservation
|
|
reservation.update!(
|
|
status: :active,
|
|
payment_status: :paid
|
|
)
|
|
Rails.logger.info "[Captain::InterWebhook] 🏨 Reservation ##{reservation.id} Confirmed!"
|
|
|
|
# Trigger N8n Webhook
|
|
::Captain::WebhookSenderService.new(reservation).perform
|
|
|
|
# Send WhatsApp Confirmation
|
|
::Captain::WhatsappNotificationService.new(reservation).perform
|
|
end
|
|
else
|
|
Rails.logger.warn "[Captain::InterWebhook] ⚠️ Charge NOT found for TXID: #{txid}"
|
|
end
|
|
end
|
|
|
|
render json: { status: 'received' }, status: :ok
|
|
end
|
|
end
|