Multi-Tenant - 05 - Checklists

Segue uma checklist prática pra você revisar/ajustar tudo.


1. Checklist por TABELA

Para cada tabela multi-tenant, confirme:

  1. Coluna de tenant

  2. Primary Key

  3. Índice padrão multi-tenant

CREATE INDEX nome_tabela_tenant_id_idx
  ON public.nome_tabela (tenant_id, id);
  1. Unicidade de negócio por tenant

CREATE UNIQUE INDEX nome_tabela_uq_tenant_codigo
  ON public.nome_tabela (tenant_id, codigo);
  1. 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();
  1. 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;
  1. 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)

  1. Função de updated_at

  2. Variável de sessão app.tenant_id

current_setting('app.tenant_id')::BIGINT
  1. Middleware de transação


3. Checklist APLICAÇÃO (Go)

  1. Contexto de tenant

  2. Uso de Tx em repositórios

  1. Service / Domain

  2. Handlers (HTTP)


4. Checklist de TESTES / VERIFICAÇÃO

  1. Teste de isolamento entre tenants

  1. Teste de “falha de WHERE tenant_id”

  2. Teste de erro de Tx