- Implemented a bash script to test n8n API and retrieve credential schemas. - Added types for API responses, Google Calendar, and WhatsApp instances. - Configured Vitest for testing with React and added setup for testing-library.
97 lines
2.8 KiB
PL/PgSQL
97 lines
2.8 KiB
PL/PgSQL
-- Criar schema portal
|
|
CREATE SCHEMA IF NOT EXISTS portal;
|
|
|
|
-- Criar função para atualizar updated_at automaticamente
|
|
CREATE OR REPLACE FUNCTION portal.update_updated_at_column()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
NEW.updated_at = NOW();
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
-- Criar tabela user_settings
|
|
CREATE TABLE portal.user_settings (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
user_id UUID REFERENCES auth.users(id) ON DELETE CASCADE,
|
|
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ DEFAULT NOW(),
|
|
UNIQUE(user_id)
|
|
);
|
|
|
|
-- Criar índice explícito para FK (performance)
|
|
CREATE INDEX idx_user_settings_user_id ON portal.user_settings(user_id);
|
|
|
|
-- Trigger para atualizar updated_at automaticamente
|
|
CREATE TRIGGER update_user_settings_updated_at
|
|
BEFORE UPDATE ON portal.user_settings
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION portal.update_updated_at_column();
|
|
|
|
-- Criar tabela integrations (para armazenar status OAuth)
|
|
CREATE TABLE portal.integrations (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
user_id UUID REFERENCES auth.users(id) ON DELETE CASCADE,
|
|
provider VARCHAR(50) NOT NULL, -- 'google_calendar'
|
|
status VARCHAR(20) DEFAULT 'disconnected', -- 'connected', 'disconnected'
|
|
connected_at TIMESTAMPTZ,
|
|
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ DEFAULT NOW(),
|
|
UNIQUE(user_id, provider)
|
|
);
|
|
|
|
-- Criar índice explícito para FK (performance)
|
|
CREATE INDEX idx_integrations_user_id ON portal.integrations(user_id);
|
|
|
|
-- Trigger para atualizar updated_at automaticamente
|
|
CREATE TRIGGER update_integrations_updated_at
|
|
BEFORE UPDATE ON portal.integrations
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION portal.update_updated_at_column();
|
|
|
|
-- Habilitar RLS
|
|
ALTER TABLE portal.user_settings ENABLE ROW LEVEL SECURITY;
|
|
ALTER TABLE portal.integrations ENABLE ROW LEVEL SECURITY;
|
|
|
|
-- Políticas RLS (usuários só veem seus próprios dados)
|
|
CREATE POLICY "Users can view own settings"
|
|
ON portal.user_settings
|
|
FOR SELECT
|
|
USING (auth.uid() = user_id);
|
|
|
|
CREATE POLICY "Users can update own settings"
|
|
ON portal.user_settings
|
|
FOR UPDATE
|
|
USING (auth.uid() = user_id);
|
|
|
|
CREATE POLICY "Users can insert own settings"
|
|
ON portal.user_settings
|
|
FOR INSERT
|
|
WITH CHECK (auth.uid() = user_id);
|
|
|
|
CREATE POLICY "Users can view own integrations"
|
|
ON portal.integrations
|
|
FOR SELECT
|
|
USING (auth.uid() = user_id);
|
|
|
|
CREATE POLICY "Users can update own integrations"
|
|
ON portal.integrations
|
|
FOR UPDATE
|
|
USING (auth.uid() = user_id);
|
|
|
|
CREATE POLICY "Users can insert own integrations"
|
|
ON portal.integrations
|
|
FOR INSERT
|
|
WITH CHECK (auth.uid() = user_id);
|
|
|
|
-- Políticas DELETE (LGPD/GDPR compliance - direito ao esquecimento)
|
|
CREATE POLICY "Users can delete own settings"
|
|
ON portal.user_settings
|
|
FOR DELETE
|
|
USING (auth.uid() = user_id);
|
|
|
|
CREATE POLICY "Users can delete own integrations"
|
|
ON portal.integrations
|
|
FOR DELETE
|
|
USING (auth.uid() = user_id);
|