Multi-Tenant - 05 - Checklists
Segue uma checklist prática pra você revisar/ajustar tudo.
1. Checklist por TABELA
Para cada tabela multi-tenant, confirme:
-
Coluna de tenant
-
Primary Key
-
Índice padrão multi-tenant
CREATE INDEX nome_tabela_tenant_id_idx
ON public.nome_tabela (tenant_id, id);
-
Unicidade de negócio por tenant
CREATE UNIQUE INDEX nome_tabela_uq_tenant_codigo
ON public.nome_tabela (tenant_id, codigo);
-
Auditoria
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
CREATE TRIGGER nome_tabela_set_updated_at
BEFORE UPDATE ON public.nome_tabela
FOR EACH ROW
EXECUTE FUNCTION set_updated_at();
-
RLS (Row Level Security)
ALTER TABLE public.nome_tabela ENABLE ROW LEVEL SECURITY;
CREATE POLICY nome_tabela_tenant_policy
ON public.nome_tabela
USING (tenant_id = current_settingBIGINT;
WITH CHECK (tenant_id = current_settingBIGINT;
-
Tabelas de junção (N:N)
CREATE INDEX nome_juncao_tenant_id_idx
ON public.nome_juncao (tenant_id, id);
CREATE UNIQUE INDEX nome_juncao_uq_tenant_a_b
ON public.nome_juncao (tenant_id, a_id, b_id);
2. Checklist INFRA (DB/RLS)
-
Função de updated_at
-
Variável de sessão
app.tenant_id
current_setting('app.tenant_id')::BIGINT
-
Middleware de transação
- Lê
tenantID(rota/header). - Abre
BEGINviadb.BeginTxx(...). - Executa
SET LOCAL app.tenant_id = $1. - Injeta a
*sqlx.Txnocontext(dbctx.WithTx). - Faz
COMMIT/ROLLBACK.
3. Checklist APLICAÇÃO (Go)
-
Contexto de tenant
-
Uso de Tx em repositórios
-
Service / Domain
-
Handlers (HTTP)
4. Checklist de TESTES / VERIFICAÇÃO
-
Teste de isolamento entre tenants
-
Teste de “falha de WHERE tenant_id”
-
Teste de erro de Tx