Primeiro commit
This commit is contained in:
190
sql/create-tables.sql
Normal file
190
sql/create-tables.sql
Normal file
@@ -0,0 +1,190 @@
|
||||
-- =====================================================
|
||||
-- SCRIPT DE CRIAÇÃO DAS TABELAS - LIBERI KIDS ESTOQUE
|
||||
-- =====================================================
|
||||
|
||||
-- 1. TABELA DE FORNECEDORES
|
||||
CREATE TABLE IF NOT EXISTS fornecedores (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
razao_social TEXT NOT NULL,
|
||||
telefone TEXT,
|
||||
whatsapp TEXT,
|
||||
endereco TEXT,
|
||||
email TEXT,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- 2. TABELA DE PRODUTOS
|
||||
CREATE TABLE IF NOT EXISTS produtos (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
id_produto TEXT,
|
||||
marca TEXT NOT NULL,
|
||||
nome TEXT NOT NULL,
|
||||
estacao TEXT NOT NULL,
|
||||
genero TEXT DEFAULT 'Unissex',
|
||||
fornecedor_id UUID REFERENCES fornecedores(id),
|
||||
valor_compra DECIMAL(10,2) NOT NULL,
|
||||
valor_revenda DECIMAL(10,2) NOT NULL,
|
||||
foto_principal_url TEXT,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- 3. TABELA DE VARIAÇÕES DE PRODUTOS
|
||||
CREATE TABLE IF NOT EXISTS produto_variacoes (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
produto_id UUID NOT NULL REFERENCES produtos(id) ON DELETE CASCADE,
|
||||
tamanho TEXT NOT NULL,
|
||||
cor TEXT NOT NULL,
|
||||
quantidade INTEGER NOT NULL DEFAULT 0,
|
||||
foto_url TEXT,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- 4. TABELA DE CLIENTES
|
||||
CREATE TABLE IF NOT EXISTS clientes (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
nome_completo TEXT NOT NULL,
|
||||
email TEXT,
|
||||
telefone TEXT,
|
||||
whatsapp TEXT,
|
||||
endereco TEXT,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- 5. TABELA DE TIPOS DE DESPESAS
|
||||
CREATE TABLE IF NOT EXISTS tipos_despesas (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
nome TEXT NOT NULL UNIQUE,
|
||||
descricao TEXT,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- 6. TABELA DE DESPESAS
|
||||
CREATE TABLE IF NOT EXISTS despesas (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
tipo_despesa_id UUID NOT NULL REFERENCES tipos_despesas(id),
|
||||
fornecedor_id UUID REFERENCES fornecedores(id),
|
||||
data_despesa DATE NOT NULL,
|
||||
valor DECIMAL(10,2) NOT NULL,
|
||||
descricao TEXT,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- 7. TABELA DE VENDAS
|
||||
CREATE TABLE IF NOT EXISTS vendas (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
cliente_id UUID REFERENCES clientes(id),
|
||||
tipo_pagamento TEXT NOT NULL CHECK (tipo_pagamento IN ('vista', 'parcelado')),
|
||||
valor_total DECIMAL(10,2) NOT NULL,
|
||||
desconto DECIMAL(10,2) DEFAULT 0,
|
||||
parcelas INTEGER DEFAULT 1,
|
||||
valor_parcela DECIMAL(10,2) DEFAULT 0,
|
||||
data_venda DATE NOT NULL,
|
||||
observacoes TEXT,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- 8. TABELA DE ITENS DE VENDA
|
||||
CREATE TABLE IF NOT EXISTS venda_itens (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
venda_id UUID NOT NULL REFERENCES vendas(id) ON DELETE CASCADE,
|
||||
produto_id UUID NOT NULL REFERENCES produtos(id),
|
||||
variacao_id UUID REFERENCES produto_variacoes(id),
|
||||
quantidade INTEGER NOT NULL,
|
||||
valor_unitario DECIMAL(10,2) NOT NULL,
|
||||
valor_total DECIMAL(10,2) NOT NULL,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- 9. TABELA DE CONFIGURAÇÕES
|
||||
CREATE TABLE IF NOT EXISTS configuracoes (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
tipo TEXT NOT NULL UNIQUE,
|
||||
configuracao JSONB NOT NULL,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- =====================================================
|
||||
-- ÍNDICES PARA PERFORMANCE
|
||||
-- =====================================================
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_produtos_fornecedor ON produtos(fornecedor_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_produto_variacoes_produto ON produto_variacoes(produto_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_despesas_tipo ON despesas(tipo_despesa_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);
|
||||
CREATE INDEX IF NOT EXISTS idx_vendas_cliente ON vendas(cliente_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_vendas_data ON vendas(data_venda);
|
||||
CREATE INDEX IF NOT EXISTS idx_venda_itens_venda ON venda_itens(venda_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_venda_itens_produto ON venda_itens(produto_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_configuracoes_tipo ON configuracoes(tipo);
|
||||
|
||||
-- =====================================================
|
||||
-- TRIGGERS PARA UPDATED_AT
|
||||
-- =====================================================
|
||||
|
||||
-- Função para atualizar updated_at
|
||||
CREATE OR REPLACE FUNCTION update_updated_at_column()
|
||||
RETURNS TRIGGER AS $$
|
||||
BEGIN
|
||||
NEW.updated_at = NOW();
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ language 'plpgsql';
|
||||
|
||||
-- Triggers para as tabelas
|
||||
CREATE TRIGGER update_fornecedores_updated_at BEFORE UPDATE ON fornecedores FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
||||
CREATE TRIGGER update_produtos_updated_at BEFORE UPDATE ON produtos FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
||||
CREATE TRIGGER update_produto_variacoes_updated_at BEFORE UPDATE ON produto_variacoes FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
||||
CREATE TRIGGER update_clientes_updated_at BEFORE UPDATE ON clientes FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
||||
CREATE TRIGGER update_despesas_updated_at BEFORE UPDATE ON despesas FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
||||
CREATE TRIGGER update_vendas_updated_at BEFORE UPDATE ON vendas FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
||||
CREATE TRIGGER update_configuracoes_updated_at BEFORE UPDATE ON configuracoes FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
||||
|
||||
-- =====================================================
|
||||
-- DADOS INICIAIS
|
||||
-- =====================================================
|
||||
|
||||
-- Inserir tipos de despesas padrão
|
||||
INSERT INTO tipos_despesas (nome, descricao) VALUES
|
||||
('Aluguel', 'Despesas com aluguel do estabelecimento'),
|
||||
('Energia Elétrica', 'Conta de luz'),
|
||||
('Água', 'Conta de água'),
|
||||
('Internet', 'Serviços de internet e telefone'),
|
||||
('Marketing', 'Despesas com publicidade e marketing'),
|
||||
('Transporte', 'Combustível, manutenção de veículos'),
|
||||
('Materiais', 'Materiais de escritório e loja'),
|
||||
('Outros', 'Outras despesas diversas')
|
||||
ON CONFLICT (nome) DO NOTHING;
|
||||
|
||||
-- =====================================================
|
||||
-- POLÍTICAS RLS (Row Level Security)
|
||||
-- =====================================================
|
||||
|
||||
-- Habilitar RLS nas tabelas
|
||||
ALTER TABLE fornecedores ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE produtos ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE produto_variacoes ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE clientes ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE tipos_despesas ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE despesas ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE vendas ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE venda_itens ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE configuracoes ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- Políticas para permitir todas as operações (ajuste conforme necessário)
|
||||
CREATE POLICY "Enable all operations for authenticated users" ON fornecedores FOR ALL USING (true);
|
||||
CREATE POLICY "Enable all operations for authenticated users" ON produtos FOR ALL USING (true);
|
||||
CREATE POLICY "Enable all operations for authenticated users" ON produto_variacoes FOR ALL USING (true);
|
||||
CREATE POLICY "Enable all operations for authenticated users" ON clientes FOR ALL USING (true);
|
||||
CREATE POLICY "Enable all operations for authenticated users" ON tipos_despesas FOR ALL USING (true);
|
||||
CREATE POLICY "Enable all operations for authenticated users" ON despesas FOR ALL USING (true);
|
||||
CREATE POLICY "Enable all operations for authenticated users" ON vendas FOR ALL USING (true);
|
||||
CREATE POLICY "Enable all operations for authenticated users" ON venda_itens FOR ALL USING (true);
|
||||
CREATE POLICY "Enable all operations for authenticated users" ON configuracoes FOR ALL USING (true);
|
||||
Reference in New Issue
Block a user