-- ============================================= -- CORRIGIR TODAS AS TABELAS FALTANTES - SOLUÇÃO FINAL -- ============================================= -- 1. Criar tabela de tipos de despesas CREATE TABLE IF NOT EXISTS tipos_despesa ( id UUID DEFAULT uuid_generate_v4() PRIMARY KEY, nome VARCHAR(255) NOT NULL UNIQUE, descricao TEXT, ativo BOOLEAN DEFAULT true, created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); -- Inserir tipos de despesas padrão INSERT INTO tipos_despesa (nome, descricao) VALUES ('Aluguel', 'Despesas com aluguel do estabelecimento'), ('Energia', 'Conta de energia elétrica'), ('Água', 'Conta de água'), ('Internet', 'Despesas com internet e telefone'), ('Marketing', 'Despesas com publicidade e marketing'), ('Transporte', 'Despesas com transporte e combustível'), ('Material', 'Material de escritório e loja'), ('Manutenção', 'Manutenção e reparos'), ('Outros', 'Outras despesas diversas') ON CONFLICT (nome) DO NOTHING; -- 2. Criar tabela de empréstimos CREATE TABLE IF NOT EXISTS emprestimos ( id UUID DEFAULT uuid_generate_v4() PRIMARY KEY, cliente_id UUID REFERENCES clientes(id), data_emprestimo DATE NOT NULL, data_devolucao_prevista DATE NOT NULL, data_devolucao_real DATE, observacoes TEXT, status VARCHAR(20) DEFAULT 'ativo' CHECK (status IN ('ativo', 'devolvido', 'cancelado')), created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); -- 3. Criar tabela de itens de empréstimo CREATE TABLE IF NOT EXISTS emprestimo_itens ( id UUID DEFAULT uuid_generate_v4() PRIMARY KEY, emprestimo_id UUID REFERENCES emprestimos(id) ON DELETE CASCADE, produto_id UUID REFERENCES produtos(id), produto_variacao_id UUID REFERENCES produto_variacoes(id), quantidade INTEGER NOT NULL, observacoes TEXT, created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); -- 4. Criar tabela de configurações CREATE TABLE IF NOT EXISTS configuracoes ( id UUID DEFAULT uuid_generate_v4() PRIMARY KEY, chave VARCHAR(255) NOT NULL UNIQUE, valor TEXT, descricao TEXT, tipo VARCHAR(50) DEFAULT 'string', created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); -- Inserir configurações básicas INSERT INTO configuracoes (chave, valor, descricao, tipo) VALUES ('evolution_api_url', '', 'URL da API Evolution', 'string'), ('evolution_api_key', '', 'Chave da API Evolution', 'string'), ('whatsapp_alertas_ativo', 'false', 'Ativar alertas WhatsApp', 'boolean'), ('whatsapp_primeiro_alerta_dias', '3', 'Dias antes para primeiro alerta', 'number'), ('whatsapp_segundo_alerta_dias', '0', 'Dias antes para segundo alerta', 'number'), ('whatsapp_alerta_pos_vencimento_dias', '3', 'Dias após vencimento para alerta', 'number') ON CONFLICT (chave) DO NOTHING; -- 5. Verificar se existe a coluna foto_principal na tabela produtos DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'produtos' AND column_name = 'foto_principal') THEN ALTER TABLE produtos ADD COLUMN foto_principal TEXT; END IF; END $$; -- 6. Verificar se a tabela despesas tem as colunas corretas DO $$ BEGIN -- Verificar se existe coluna tipo_id IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'despesas' AND column_name = 'tipo_id') THEN ALTER TABLE despesas ADD COLUMN tipo_id UUID REFERENCES tipos_despesa(id); END IF; -- Verificar se existe coluna fornecedor_id IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'despesas' AND column_name = 'fornecedor_id') THEN ALTER TABLE despesas ADD COLUMN fornecedor_id UUID REFERENCES fornecedores(id); END IF; END $$; -- 7. Criar índices para melhor performance CREATE INDEX IF NOT EXISTS idx_tipos_despesa_nome ON tipos_despesa(nome); CREATE INDEX IF NOT EXISTS idx_emprestimos_cliente ON emprestimos(cliente_id); CREATE INDEX IF NOT EXISTS idx_emprestimos_status ON emprestimos(status); CREATE INDEX IF NOT EXISTS idx_emprestimos_data ON emprestimos(data_emprestimo); CREATE INDEX IF NOT EXISTS idx_configuracoes_chave ON configuracoes(chave); CREATE INDEX IF NOT EXISTS idx_despesas_tipo ON despesas(tipo_id); CREATE INDEX IF NOT EXISTS idx_despesas_fornecedor ON despesas(fornecedor_id); CREATE INDEX IF NOT EXISTS idx_despesas_data ON despesas(data_despesa); -- 8. Verificar criação das tabelas SELECT 'VERIFICAÇÃO DAS TABELAS CRIADAS:' as status; SELECT table_name, CASE WHEN table_name IN ( SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' ) THEN '✅ Existe' ELSE '❌ Não existe' END as status FROM ( VALUES ('tipos_despesa'), ('emprestimos'), ('emprestimo_itens'), ('configuracoes'), ('despesas'), ('clientes'), ('produtos'), ('fornecedores') ) AS t(table_name) ORDER BY table_name; -- 9. Verificar dados inseridos SELECT 'Tipos de despesas cadastrados:' as info, COUNT(*) as total FROM tipos_despesa; SELECT 'Configurações cadastradas:' as info, COUNT(*) as total FROM configuracoes; SELECT '🎉 SETUP COMPLETO! Todas as tabelas foram criadas/verificadas.' as resultado;