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>
39 lines
1.4 KiB
Ruby
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
|