iachat/lib/tasks/captain_reserva.rake
Rodribm10 c5cd15665e feat(captain): provisionamento automático de Captain::Unit em reserva_hotel.unidades
Hook after_commit on:create no Captain::Unit dispara
ProvisionUnitInSupabaseJob, que upserta a unit em reserva_hotel.unidades
via Supabase REST (UNIQUE on tenant_id+chatwoot_unit_id) e grava IDs no
Captain::Unit (supabase_unit_id, supabase_tenant_id, supabase_marca_id).

Sem isso, criar nova unidade no painel Pix não habilitava roleta — a row
no Supabase ficava ausente e OfferService caía em "tenant não resolvido".

Inclui rake captain:reprovision_unit_in_supabase[id] + provision_all
pra reconciliação manual e migration retroativa.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 00:21:20 -03:00

39 lines
1.4 KiB
Ruby

namespace :captain do
desc 'Provisiona/reconcilia 1 Captain::Unit em reserva_hotel.unidades (Supabase reserva-1001)'
task :reprovision_unit_in_supabase, [:unit_id] => :environment do |_t, args|
unit_id = args[:unit_id]
abort 'uso: rake captain:reprovision_unit_in_supabase[<unit_id>]' if unit_id.blank?
unit = Captain::Unit.find_by(id: unit_id)
abort "Captain::Unit #{unit_id} não encontrada" if unit.blank?
result = Captain::Reserva::ProvisionUnitInSupabaseService.new(unit: unit).perform
if result[:success]
puts "[OK] unit=#{unit.id} (#{unit.name}) -> supabase_unit=#{result[:supabase_unit_id]}"
else
puts "[ERRO] unit=#{unit.id} (#{unit.name}): #{result[:error]}"
exit 1
end
end
desc 'Reconcilia TODAS as Captain::Unit em reserva_hotel.unidades (idempotente)'
task provision_all_units_in_supabase: :environment do
units = Captain::Unit.includes(:brand).order(:id)
puts "Reconciliando #{units.count} unidade(s)..."
failures = 0
units.each do |unit|
result = Captain::Reserva::ProvisionUnitInSupabaseService.new(unit: unit).perform
if result[:success]
puts " [OK] unit=#{unit.id} (#{unit.name}) -> #{result[:supabase_unit_id]}"
else
failures += 1
puts " [ERRO] unit=#{unit.id} (#{unit.name}): #{result[:error]}"
end
end
puts "Done. #{units.count - failures}/#{units.count} OK."
exit 1 if failures.positive?
end
end