reserva_chatmotel/supabase/migrations/20260414000002_add_tenant_id_backfill.sql
Rodribm10 e912563196 feat: schema multi-tenant (tenants, app_config, tenant_id backfill, RLS)
- Novas tabelas reserva_hotel.tenants e reserva_hotel.app_config
- Coluna tenant_id adicionada em todas as tabelas de catalogo/reservas
- Tenant default 'grupo-1001' criado + backfill das rows existentes
- RLS + grants pro anon ler tenants e app_config
- Types TS regenerados

Aplicado via MCP. Arquivos de migration sao source of truth historica.
2026-04-14 20:59:37 -03:00

71 lines
4.0 KiB
SQL

-- Adiciona tenant_id em todas as tabelas existentes + cria tenant default
-- + backfill de tudo pro tenant 1 ("Grupo Nova / Rede 1001")
-- Já aplicada via MCP.
-- 1. Tenant default
insert into reserva_hotel.tenants (slug, nome, ativo)
values ('grupo-1001', 'Grupo Nova — Rede 1001', true)
on conflict (slug) do nothing;
-- 2. app_config default
insert into reserva_hotel.app_config
(tenant_id, nome_rede, titulo_hero, subtitulo_hero, tagline, footer_text,
cor_primaria, cor_secundaria, cor_fundo, cor_superficie, cor_texto,
fonte_display, fonte_corpo)
select
t.id,
'Rede 1001',
'Reserva Rede 1001',
'Experiência exclusiva',
'Escolha, confirme e receba seu PIX na hora.',
'© 2026 Rede 1001 · Experiência Exclusiva',
'#C9A961', '#E8B4A0', '#0B0D12', '#0F1A2E', '#F5F1E8',
'Fraunces', 'Inter'
from reserva_hotel.tenants t
where t.slug = 'grupo-1001'
on conflict (tenant_id) do nothing;
-- 3. Adiciona tenant_id (nullable pra backfill)
alter table reserva_hotel.marcas add column if not exists tenant_id bigint references reserva_hotel.tenants(id);
alter table reserva_hotel.unidades add column if not exists tenant_id bigint references reserva_hotel.tenants(id);
alter table reserva_hotel.suites add column if not exists tenant_id bigint references reserva_hotel.tenants(id);
alter table reserva_hotel.precos add column if not exists tenant_id bigint references reserva_hotel.tenants(id);
alter table reserva_hotel.contas_pagamento add column if not exists tenant_id bigint references reserva_hotel.tenants(id);
alter table reserva_hotel.reservas add column if not exists tenant_id bigint references reserva_hotel.tenants(id);
alter table reserva_hotel.fotos_categoria add column if not exists tenant_id bigint references reserva_hotel.tenants(id);
alter table reserva_hotel.extras add column if not exists tenant_id bigint references reserva_hotel.tenants(id);
-- 4. Backfill
do $$
declare v_tenant_id bigint;
begin
select id into v_tenant_id from reserva_hotel.tenants where slug = 'grupo-1001';
update reserva_hotel.marcas set tenant_id = v_tenant_id where tenant_id is null;
update reserva_hotel.unidades set tenant_id = v_tenant_id where tenant_id is null;
update reserva_hotel.suites set tenant_id = v_tenant_id where tenant_id is null;
update reserva_hotel.precos set tenant_id = v_tenant_id where tenant_id is null;
update reserva_hotel.contas_pagamento set tenant_id = v_tenant_id where tenant_id is null;
update reserva_hotel.reservas set tenant_id = v_tenant_id where tenant_id is null;
update reserva_hotel.fotos_categoria set tenant_id = v_tenant_id where tenant_id is null;
update reserva_hotel.extras set tenant_id = v_tenant_id where tenant_id is null;
end $$;
-- 5. NOT NULL
alter table reserva_hotel.marcas alter column tenant_id set not null;
alter table reserva_hotel.unidades alter column tenant_id set not null;
alter table reserva_hotel.suites alter column tenant_id set not null;
alter table reserva_hotel.precos alter column tenant_id set not null;
alter table reserva_hotel.contas_pagamento alter column tenant_id set not null;
alter table reserva_hotel.reservas alter column tenant_id set not null;
alter table reserva_hotel.fotos_categoria alter column tenant_id set not null;
alter table reserva_hotel.extras alter column tenant_id set not null;
-- 6. Indexes
create index if not exists idx_marcas_tenant on reserva_hotel.marcas(tenant_id);
create index if not exists idx_unidades_tenant on reserva_hotel.unidades(tenant_id);
create index if not exists idx_precos_tenant on reserva_hotel.precos(tenant_id);
create index if not exists idx_reservas_tenant on reserva_hotel.reservas(tenant_id);
create index if not exists idx_fotos_categoria_tenant on reserva_hotel.fotos_categoria(tenant_id);
create index if not exists idx_extras_tenant on reserva_hotel.extras(tenant_id);