SQL para Criar as Tabelas
Execute no SQL Editor do Supabase:
-- Tabela de pessoas (já existente)
CREATE TABLE pessoas (
id SERIAL PRIMARY KEY,
tipo TEXT NOT NULL CHECK (tipo IN ('missionario', 'candidato')),
-- Dados Pessoais
nome TEXT NOT NULL,
cpf TEXT,
data_nascimento DATE,
idade INTEGER,
email TEXT NOT NULL,
telefone TEXT,
igreja TEXT NOT NULL,
nacionalidade TEXT,
foto TEXT,
-- Família
estado_civil TEXT,
nome_conjuge TEXT,
quantidade_filhos INTEGER DEFAULT 0,
info_filhos TEXT,
-- Ministerial
pais TEXT,
regiao TEXT,
cidade TEXT,
status TEXT,
tipo_ministerio TEXT,
data_inicio_missao DATE,
objetivos_metas TEXT,
parcerias_locais TEXT,
desafios TEXT,
formacao_experiencia TEXT,
-- Saúde
saude_fisica TEXT,
saude_mental TEXT,
adaptacao_cultural TEXT,
nivel_idioma TEXT,
tratamentos_especiais TEXT,
situacao_filhos TEXT,
necessidades_descanso TEXT,
-- Financeiro
sustento_mensal DECIMAL(10,2),
status_pagamentos TEXT,
apoiadores TEXT,
despesas_especiais TEXT,
necessidades_extras TEXT,
ultimo_relatorio_financeiro DATE,
proximo_relatorio DATE,
-- Comunicação
frequencia_contato TEXT,
meio_comunicacao TEXT,
ultimo_contato DATE,
proximo_contato DATE,
ultimas_comunicacoes TEXT,
solicitacoes_oracao TEXT,
observacoes_gerais TEXT,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);
-- Tabela de usuários
CREATE TABLE usuarios (
id UUID DEFAULT auth.uid() PRIMARY KEY,
email TEXT UNIQUE NOT NULL,
nome TEXT NOT NULL,
role TEXT NOT NULL CHECK (role IN ('admin', 'coordinator', 'viewer')),
ultimo_login TIMESTAMP,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);
-- Função para atualizar updated_at automaticamente
CREATE OR REPLACE FUNCTION update_updated_at_column()
RETURNS TRIGGER AS $
BEGIN
NEW.updated_at = NOW();
RETURN NEW;
END;
$ language 'plpgsql';
-- Triggers para atualizar updated_at
CREATE TRIGGER update_pessoas_updated_at BEFORE UPDATE ON pessoas
FOR EACH ROW EXECUTE PROCEDURE update_updated_at_column();
CREATE TRIGGER update_usuarios_updated_at BEFORE UPDATE ON usuarios
FOR EACH ROW EXECUTE PROCEDURE update_updated_at_column();
-- Políticas de segurança (RLS)
ALTER TABLE pessoas ENABLE ROW LEVEL SECURITY;
ALTER TABLE usuarios ENABLE ROW LEVEL SECURITY;
-- Políticas para pessoas (todos podem ver e editar - ajuste conforme necessário)
CREATE POLICY "Permitir tudo para pessoas autenticadas" ON pessoas
FOR ALL USING (auth.role() = 'authenticated');
-- Políticas para usuários
CREATE POLICY "Usuários podem ver outros usuários" ON usuarios
FOR SELECT USING (auth.role() = 'authenticated');
CREATE POLICY "Usuários podem atualizar próprio perfil" ON usuarios
FOR UPDATE USING (auth.uid() = id);
-- Função para inserir usuário automaticamente após signup
CREATE OR REPLACE FUNCTION public.handle_new_user()
RETURNS TRIGGER AS $
BEGIN
INSERT INTO public.usuarios (id, email, nome, role)
VALUES (new.id, new.email, COALESCE(new.raw_user_meta_data->>'full_name', 'Usuário'), 'viewer');
RETURN new;
END;
$ language 'plpgsql' security definer;
-- Trigger para criar usuário automaticamente
CREATE TRIGGER on_auth_user_created
AFTER INSERT ON auth.users
FOR EACH ROW EXECUTE PROCEDURE public.handle_new_user();