photum/backend/internal/db/migrations/006_sync_production.sql
NANDO9322 765496065a feat: suporte a FOT alfanumérico e correções de UI
Backend:
- Migration 007: alterada coluna `fot` de INTEGER para VARCHAR(50).
- Ajustados serviços (finance, agenda) e handlers para processar FOT como string.
- Regenerados modelos e queries do banco de dados (sqlc).

Frontend:
- [FotForm](cci:1://file:///c:/Projetos/photum/frontend/components/FotForm.tsx:13:0-348:2): Permitido input de texto/alfanumérico (ex: "20000MG").
- [EventTable](cci:1://file:///c:/Projetos/photum/frontend/components/EventTable.tsx:29:0-684:2): Removido bloqueio do botão "Aprovar" para equipes incompletas.
- [Dashboard](cci:1://file:///c:/Projetos/photum/frontend/pages/Dashboard.tsx:31:0-1749:2): Corrigida duplicação do campo "Qtd Formandos".
- [Dashboard](cci:1://file:///c:/Projetos/photum/frontend/pages/Dashboard.tsx:31:0-1749:2): Filtros de "Gerenciar Equipe" agora usam funções dinâmicas (IDs) em vez de valores fixos.
- `Navbar`: Logo agora redireciona corretamente para `/painel`.
2026-01-29 22:15:14 -03:00

207 lines
8.7 KiB
SQL

-- 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 $$;