-- Migration de Sincronização Completa (DEV -> PROD/HML) -- Este script verifica e cria colunas/tabelas que podem estar faltando após o merge de DEV. -- Seguro para rodar múltiplas vezes (usa IF NOT EXISTS). -- ============================================================================== -- 1. UTILS -- ============================================================================== CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; -- ============================================================================== -- 2. CADASTRO DE PROFISSIONAIS (Atualizações de Colunas) -- ============================================================================== ALTER TABLE cadastro_profissionais ADD COLUMN IF NOT EXISTS email VARCHAR(255); ALTER TABLE cadastro_profissionais ADD COLUMN IF NOT EXISTS avatar_url VARCHAR(255); ALTER TABLE cadastro_profissionais ADD COLUMN IF NOT EXISTS tabela_free VARCHAR(50); ALTER TABLE cadastro_profissionais ADD COLUMN IF NOT EXISTS media NUMERIC(3,2); ALTER TABLE cadastro_profissionais ADD COLUMN IF NOT EXISTS equipamentos TEXT; ALTER TABLE cadastro_profissionais ADD COLUMN IF NOT EXISTS extra_por_equipamento BOOLEAN DEFAULT FALSE; ALTER TABLE cadastro_profissionais ADD COLUMN IF NOT EXISTS qtd_estudio INT; ALTER TABLE cadastro_profissionais ADD COLUMN IF NOT EXISTS disp_horario INT; ALTER TABLE cadastro_profissionais ADD COLUMN IF NOT EXISTS desempenho_evento INT; ALTER TABLE cadastro_profissionais ADD COLUMN IF NOT EXISTS educacao_simpatia INT; ALTER TABLE cadastro_profissionais ADD COLUMN IF NOT EXISTS qual_tec INT; -- ============================================================================== -- 3. TABELAS DE DOMÍNIO E CONFIGURAÇÃO -- ============================================================================== -- Tabela de Preços (Se não existir) CREATE TABLE IF NOT EXISTS precos_tipos_eventos ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), tipo_evento_id UUID REFERENCES tipos_eventos(id) ON DELETE CASCADE, funcao_profissional_id UUID REFERENCES funcoes_profissionais(id) ON DELETE CASCADE, valor NUMERIC(10,2) NOT NULL DEFAULT 0.00, criado_em TIMESTAMPTZ NOT NULL DEFAULT NOW(), UNIQUE(tipo_evento_id, funcao_profissional_id) ); -- Tabela de Cadastro FOT (Se não existir) CREATE TABLE IF NOT EXISTS cadastro_fot ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), fot INTEGER NOT NULL UNIQUE, empresa_id UUID NOT NULL REFERENCES empresas(id), curso_id UUID NOT NULL REFERENCES cursos(id), ano_formatura_id UUID NOT NULL REFERENCES anos_formaturas(id), instituicao VARCHAR(255), cidade VARCHAR(255), estado VARCHAR(2), observacoes TEXT, gastos_captacao NUMERIC(10, 2), pre_venda BOOLEAN, created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP ); -- Códigos de Acesso CREATE TABLE IF NOT EXISTS codigos_acesso ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), codigo VARCHAR(50) UNIQUE NOT NULL, descricao VARCHAR(255), validade_dias INT NOT NULL DEFAULT 30, criado_em TIMESTAMPTZ NOT NULL DEFAULT NOW(), expira_em TIMESTAMPTZ NOT NULL, ativo BOOLEAN NOT NULL DEFAULT TRUE, usos INT NOT NULL DEFAULT 0 ); -- Cadastro Clientes CREATE TABLE IF NOT EXISTS cadastro_clientes ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), usuario_id UUID REFERENCES usuarios(id) ON DELETE CASCADE, empresa_id UUID REFERENCES empresas(id) ON DELETE SET NULL, nome VARCHAR(255), telefone VARCHAR(20), criado_em TIMESTAMPTZ NOT NULL DEFAULT NOW(), atualizado_em TIMESTAMPTZ NOT NULL DEFAULT NOW(), UNIQUE(usuario_id) ); -- Juntação Profissionais <-> Funções CREATE TABLE IF NOT EXISTS profissionais_funcoes_junction ( profissional_id UUID NOT NULL REFERENCES cadastro_profissionais(id) ON DELETE CASCADE, funcao_id UUID NOT NULL REFERENCES funcoes_profissionais(id) ON DELETE CASCADE, PRIMARY KEY (profissional_id, funcao_id) ); -- ============================================================================== -- 4. MÓDULO DE AGENDA E LOGÍSTICA -- ============================================================================== -- Agenda CREATE TABLE IF NOT EXISTS agenda ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), user_id UUID REFERENCES usuarios(id) ON DELETE CASCADE, fot_id UUID NOT NULL REFERENCES cadastro_fot(id) ON DELETE CASCADE, data_evento DATE NOT NULL, tipo_evento_id UUID NOT NULL REFERENCES tipos_eventos(id), observacoes_evento TEXT, local_evento VARCHAR(255), endereco VARCHAR(255), horario VARCHAR(20), qtd_formandos INTEGER DEFAULT 0, qtd_fotografos INTEGER DEFAULT 0, qtd_recepcionistas INTEGER DEFAULT 0, qtd_cinegrafistas INTEGER DEFAULT 0, qtd_estudios INTEGER DEFAULT 0, qtd_ponto_foto INTEGER DEFAULT 0, qtd_ponto_id INTEGER DEFAULT 0, qtd_ponto_decorado INTEGER DEFAULT 0, qtd_pontos_led INTEGER DEFAULT 0, qtd_plataforma_360 INTEGER DEFAULT 0, status_profissionais VARCHAR(20) DEFAULT 'OK', foto_faltante INTEGER DEFAULT 0, recep_faltante INTEGER DEFAULT 0, cine_faltante INTEGER DEFAULT 0, logistica_observacoes TEXT, pre_venda BOOLEAN DEFAULT FALSE, criado_em TIMESTAMPTZ NOT NULL DEFAULT NOW(), atualizado_em TIMESTAMPTZ NOT NULL DEFAULT NOW(), status VARCHAR(50) DEFAULT 'Pendente' ); -- Agenda Profissionais (Atribuição) CREATE TABLE IF NOT EXISTS agenda_profissionais ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), agenda_id UUID NOT NULL REFERENCES agenda(id) ON DELETE CASCADE, profissional_id UUID NOT NULL REFERENCES cadastro_profissionais(id) ON DELETE CASCADE, status VARCHAR(20) DEFAULT 'PENDENTE', motivo_rejeicao TEXT, funcao_id UUID REFERENCES funcoes_profissionais(id), criado_em TIMESTAMPTZ NOT NULL DEFAULT NOW(), UNIQUE(agenda_id, profissional_id) ); ALTER TABLE agenda_profissionais ADD COLUMN IF NOT EXISTS posicao VARCHAR(100); -- Disponibilidade CREATE TABLE IF NOT EXISTS disponibilidade_profissionais ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), usuario_id UUID NOT NULL REFERENCES usuarios(id) ON DELETE CASCADE, data DATE NOT NULL, status VARCHAR(20) NOT NULL DEFAULT 'DISPONIVEL', criado_em TIMESTAMPTZ NOT NULL DEFAULT NOW(), UNIQUE(usuario_id, data) ); -- Escalas (Time blocks) CREATE TABLE IF NOT EXISTS agenda_escalas ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), agenda_id UUID NOT NULL REFERENCES agenda(id) ON DELETE CASCADE, profissional_id UUID NOT NULL REFERENCES cadastro_profissionais(id) ON DELETE CASCADE, data_hora_inicio TIMESTAMPTZ NOT NULL, data_hora_fim TIMESTAMPTZ NOT NULL, funcao_especifica VARCHAR(100), criado_em TIMESTAMPTZ NOT NULL DEFAULT NOW(), atualizado_em TIMESTAMPTZ NOT NULL DEFAULT NOW() ); -- Mapas CREATE TABLE IF NOT EXISTS mapas_eventos ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), agenda_id UUID NOT NULL REFERENCES agenda(id) ON DELETE CASCADE, nome VARCHAR(100), imagem_url TEXT, criado_em TIMESTAMPTZ NOT NULL DEFAULT NOW() ); -- Marcadores CREATE TABLE IF NOT EXISTS marcadores_mapa ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), mapa_id UUID NOT NULL REFERENCES mapas_eventos(id) ON DELETE CASCADE, profissional_id UUID REFERENCES cadastro_profissionais(id) ON DELETE CASCADE, pos_x NUMERIC(5,2), pos_y NUMERIC(5,2), rotulo VARCHAR(50), criado_em TIMESTAMPTZ NOT NULL DEFAULT NOW() ); -- Logística Carros CREATE TABLE IF NOT EXISTS logistica_carros ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), agenda_id UUID NOT NULL REFERENCES agenda(id) ON DELETE CASCADE, motorista_id UUID REFERENCES cadastro_profissionais(id) ON DELETE SET NULL, nome_motorista VARCHAR(255), horario_chegada VARCHAR(20), observacoes TEXT, criado_em TIMESTAMPTZ NOT NULL DEFAULT NOW(), atualizado_em TIMESTAMPTZ NOT NULL DEFAULT NOW() ); -- Logística Passageiros CREATE TABLE IF NOT EXISTS logistica_passageiros ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), carro_id UUID NOT NULL REFERENCES logistica_carros(id) ON DELETE CASCADE, profissional_id UUID NOT NULL REFERENCES cadastro_profissionais(id) ON DELETE CASCADE, criado_em TIMESTAMPTZ NOT NULL DEFAULT NOW(), UNIQUE(carro_id, profissional_id) ); -- ============================================================================== -- 5. MÓDULO FINANCEIRO (Atualizações) -- ============================================================================== DO $$ BEGIN IF EXISTS (SELECT FROM information_schema.tables WHERE table_name = 'financial_transactions') THEN ALTER TABLE financial_transactions ADD COLUMN IF NOT EXISTS profissional_id UUID REFERENCES cadastro_profissionais(id); END IF; END $$;