Configuração do Banco de Dados
Instruções para executar o schema inicial no Supabase e habilitar as features necessárias.
1. Executar o Schema SQL
Via Supabase SQL Editor (recomendado)
- Acesse supabase.com/dashboard e abra seu projeto
- Vá em SQL Editor no menu lateral
- Clique em New query
- Abra o arquivo
backend/supabase/migrations/20260518_initial_schema.sql - Cole o conteúdo completo no editor
- Clique em Run (ou
Ctrl+Enter)
Via Supabase CLI
# Autenticar
supabase login
# Linkar ao projeto (substitua <project-ref> pelo ID do seu projeto)
supabase link --project-ref <project-ref>
# Aplicar migration
supabase db push
2. Verificar as Tabelas Criadas
Após executar o SQL, verifique no Table Editor do Supabase que as seguintes tabelas foram criadas:
| Tabela | Descrição |
|---|---|
profiles |
Perfis de usuários (admin e driver) |
pricing_config |
Configuração de preço (base_fare, price_per_km, min_km) |
deliveries |
Entregas com status e coordenadas |
driver_locations |
Localização GPS atual de cada driver |
wallets |
Carteira financeira dos drivers |
transactions |
Histórico de créditos e débitos |
withdrawals |
Solicitações de saque via Pix |
push_subscriptions |
Assinaturas de Web Push dos drivers |
3. Habilitar Supabase Realtime
O mapa de rastreamento e as atualizações em tempo real dependem do Supabase Realtime.
- No dashboard, vá em Database > Replication
- Clique em 0 tables ao lado de "Source"
- Ative as seguintes tabelas:
| Tabela | Usado por |
|---|---|
driver_locations |
Mapa do admin (GPS em tempo real) |
deliveries |
Lista de entregas do driver |
wallets |
Saldo do driver em tempo real |
4. Configurar Auth
Criar usuário Admin inicial
Via Supabase Dashboard > Authentication > Users > Add user:
- Informe email e senha
- Em "User Metadata", adicione:
O trigger on_auth_user_created cria automaticamente o registro em profiles.
Criar usuário Driver
Mesmo processo, mas com:
O trigger on_profile_created cria automaticamente a carteira (wallets) do driver.
5. Verificar RLS
Row Level Security (RLS) está habilitado em todas as tabelas. Para verificar:
-- No SQL Editor, execute:
SELECT schemaname, tablename, rowsecurity
FROM pg_tables
WHERE schemaname = 'public'
ORDER BY tablename;
Todas as linhas devem mostrar rowsecurity = true.
6. Pricing Config Inicial
O schema já insere uma configuração padrão:
Isso significa: - Tarifa base: R$ 15,00 (inclui os primeiros 5 km) - Quilômetro adicional: R$ 2,00/km - Mínimo incluído: 5 km
Para alterar, use o endpoint PUT /api/v1/pricing como admin, ou diretamente via SQL.
7. Funções e Triggers Criados
O schema cria automaticamente:
| Função/Trigger | Descrição |
|---|---|
handle_new_user() |
Cria profiles ao cadastrar usuário no Auth |
create_driver_wallet() |
Cria wallets ao criar profile de driver |
increment_wallet_balance(p_driver_id, p_amount) |
Incrementa saldo (chamada pelo backend via RPC) |
decrement_wallet_balance(p_driver_id, p_amount) |
Decrementa saldo para saques confirmados |
8. Índices de Performance
Os seguintes índices são criados automaticamente:
idx_deliveries_status -- filtrar por status
idx_deliveries_driver -- entregas de um driver
idx_deliveries_created -- ordenar por data DESC
idx_deliveries_wait -- entregas pending (fila)
idx_transactions_driver -- transações por driver
idx_withdrawals_driver -- saques por driver
idx_withdrawals_asaas -- busca por asaas_transfer_id
idx_driver_locations_online -- drivers online (mapa)
idx_push_subs_driver -- subscriptions por driver
Troubleshooting
Erro: 'relation already exists'
O schema usa CREATE TABLE IF NOT EXISTS, então é seguro re-executar.
Se houver conflito em policies, use DROP POLICY IF EXISTS antes.
Resetar o banco em desenvolvimento
No SQL Editor, execute DROP SCHEMA public CASCADE; CREATE SCHEMA public;
e depois re-execute o migration completo.