# Guia — SQL Base do Schema Isolado (Supabase)

> **planilhaprofissional.com** · Como criar o banco de cada app

---

## Passo a passo

### 1. Escolher o nome do schema

| App | Schema |
|-----|--------|
| PetCare | `petcare` |
| Finanças Pro | `financas` |
| GalõesPro | `galoes` |
| Supermercado | `mercado` |
| PP Core Dev | `pp_core` |
| PRD Factory | `prd_factory` |

Use **apenas letras minúsculas, números e underscore**.

### 2. Executar o SQL no Supabase

1. Abra o projeto no [Supabase Dashboard](https://supabase.com/dashboard)
2. Vá em **SQL Editor** → **New query**
3. Abra o arquivo `supabase/templates/create_app_schema.sql`
4. Substitua **`__SCHEMA__`** pelo nome do schema (ex.: `financas`)
5. Execute o script completo

### 3. Expor o schema na API

1. **Project Settings** → **API** → **Exposed schemas**
2. Adicione o schema criado (ex.: `financas`)
3. Salve

Sem isso, o cliente Supabase não acessa as tabelas do schema.

### 4. Configurar no app (frontend)

```env
VITE_SUPABASE_URL=https://seu-projeto.supabase.co
VITE_SUPABASE_ANON_KEY=sua_chave_anon
VITE_APP_SCHEMA=financas
```

No cliente Supabase, use `.schema('financas')` nas consultas:

```typescript
const { data } = await supabase
  .schema('financas')
  .from('profiles')
  .select('*');
```

### 5. Verificar no Table Editor

Após executar o SQL, o schema aparece no seletor de schemas do **Table Editor** com as tabelas:

- `companies`
- `profiles`
- `subscriptions`
- `audit_logs`
- `password_change_log`

---

## Tabelas criadas (padrão fábrica)

| Tabela | Função |
|--------|--------|
| `companies` | Multi-tenant — `company_id` |
| `profiles` | Perfil do usuário + `role` + `password_changed_at` |
| `subscriptions` | Plano Hotmart (`plan`, `subscription_tier`) |
| `audit_logs` | Auditoria imutável |
| `password_change_log` | Histórico de alteração de senha |

---

## Segurança incluída no script

- RLS habilitado em todas as tabelas
- Políticas por `company_id` e `role` (Administrador, Operador, Cliente)
- `audit_logs` — insert só via trigger/função; leitura só Admin
- Função `__SCHEMA__.write_audit_log()` para Edge Functions
- Trigger de auditoria em `companies`, `profiles`, `subscriptions`

---

## Adicionar tabelas do app

Depois do schema base, crie as tabelas específicas do app **no mesmo schema**:

```sql
-- Exemplo: financas.transactions
CREATE TABLE financas.transactions (
  id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  company_id uuid NOT NULL REFERENCES financas.companies(id),
  -- campos do app...
  created_at timestamptz NOT NULL DEFAULT now(),
  updated_at timestamptz NOT NULL DEFAULT now()
);

ALTER TABLE financas.transactions ENABLE ROW LEVEL SECURITY;
-- políticas RLS + trigger de auditoria (ver template)
```

---

## Referências

- [ARQUITETURA_FABRICA_APPS.md](../padroes/ARQUITETURA_FABRICA_APPS.md) §8
- [AUDITORIA.md](../padroes/AUDITORIA.md)
- Template SQL: [create_app_schema.sql](../../supabase/templates/create_app_schema.sql)

---

*planilhaprofissional.com*
