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`.
207 lines
8.7 KiB
SQL
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 $$;
|