88 lines
3.3 KiB
SQL
88 lines
3.3 KiB
SQL
-- Initialize PostgreSQL Database for Aggios
|
|
-- Enable UUID extension
|
|
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
|
|
CREATE EXTENSION IF NOT EXISTS "pgcrypto";
|
|
|
|
-- Tenants table
|
|
CREATE TABLE IF NOT EXISTS tenants (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
name VARCHAR(255) NOT NULL,
|
|
domain VARCHAR(255) UNIQUE NOT NULL,
|
|
subdomain VARCHAR(63) UNIQUE NOT NULL,
|
|
cnpj VARCHAR(18),
|
|
razao_social VARCHAR(255),
|
|
email VARCHAR(255),
|
|
phone VARCHAR(20),
|
|
website VARCHAR(255),
|
|
address TEXT,
|
|
city VARCHAR(100),
|
|
state VARCHAR(2),
|
|
zip VARCHAR(10),
|
|
description TEXT,
|
|
industry VARCHAR(100),
|
|
is_active BOOLEAN DEFAULT true,
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- Users table
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
tenant_id UUID REFERENCES tenants(id) ON DELETE CASCADE,
|
|
email VARCHAR(255) NOT NULL UNIQUE,
|
|
password_hash VARCHAR(255) NOT NULL,
|
|
first_name VARCHAR(128),
|
|
last_name VARCHAR(128),
|
|
role VARCHAR(50) DEFAULT 'CLIENTE' CHECK (role IN ('SUPERADMIN', 'ADMIN_AGENCIA', 'CLIENTE')),
|
|
is_active BOOLEAN DEFAULT true,
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- Refresh tokens table
|
|
CREATE TABLE IF NOT EXISTS refresh_tokens (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
token_hash VARCHAR(255) NOT NULL,
|
|
expires_at TIMESTAMP WITH TIME ZONE NOT NULL,
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- Create indexes
|
|
CREATE INDEX IF NOT EXISTS idx_users_tenant_id ON users(tenant_id);
|
|
CREATE INDEX IF NOT EXISTS idx_users_email ON users(email);
|
|
CREATE INDEX IF NOT EXISTS idx_refresh_tokens_user_id ON refresh_tokens(user_id);
|
|
CREATE INDEX IF NOT EXISTS idx_refresh_tokens_expires_at ON refresh_tokens(expires_at);
|
|
CREATE INDEX IF NOT EXISTS idx_tenants_subdomain ON tenants(subdomain);
|
|
CREATE INDEX IF NOT EXISTS idx_tenants_domain ON tenants(domain);
|
|
|
|
-- Companies table
|
|
CREATE TABLE IF NOT EXISTS companies (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
tenant_id UUID NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
|
|
cnpj VARCHAR(18) NOT NULL,
|
|
razao_social VARCHAR(255) NOT NULL,
|
|
nome_fantasia VARCHAR(255),
|
|
email VARCHAR(255),
|
|
telefone VARCHAR(20),
|
|
status VARCHAR(50) DEFAULT 'active',
|
|
created_by_user_id UUID REFERENCES users(id),
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
|
UNIQUE(tenant_id, cnpj)
|
|
);
|
|
|
|
-- Create indexes
|
|
CREATE INDEX IF NOT EXISTS idx_companies_tenant_id ON companies(tenant_id);
|
|
CREATE INDEX IF NOT EXISTS idx_companies_cnpj ON companies(cnpj);
|
|
|
|
-- Insert SUPERADMIN user (você - admin master da AGGIOS)
|
|
INSERT INTO users (email, password_hash, first_name, role, is_active)
|
|
VALUES ('admin@aggios.app', '$2a$10$YourHashedPasswordHere', 'Admin Master', 'SUPERADMIN', true)
|
|
ON CONFLICT (email) DO NOTHING;
|
|
|
|
-- Insert sample tenant for testing
|
|
INSERT INTO tenants (name, domain, subdomain, is_active)
|
|
VALUES ('Agência Teste', 'agencia-teste.aggios.app', 'agencia-teste', true)
|
|
ON CONFLICT DO NOTHING;
|