Primeiro commit
This commit is contained in:
102
sql/emprestimos-tables.sql
Normal file
102
sql/emprestimos-tables.sql
Normal file
@@ -0,0 +1,102 @@
|
||||
-- =====================================================
|
||||
-- TABELAS PARA SISTEMA DE EMPRÉSTIMOS
|
||||
-- =====================================================
|
||||
|
||||
-- 1. TABELA DE EMPRÉSTIMOS
|
||||
CREATE TABLE IF NOT EXISTS emprestimos (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
pessoa VARCHAR(100) NOT NULL DEFAULT 'Maiara',
|
||||
valor_total DECIMAL(10,2) NOT NULL,
|
||||
valor_restante DECIMAL(10,2) NOT NULL,
|
||||
descricao TEXT,
|
||||
data_emprestimo DATE NOT NULL DEFAULT CURRENT_DATE,
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'ativo' CHECK (status IN ('ativo', 'quitado', 'cancelado')),
|
||||
created_at TIMESTAMP DEFAULT NOW(),
|
||||
updated_at TIMESTAMP DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- 2. TABELA DE DEVOLUÇÕES/PARCELAS
|
||||
CREATE TABLE IF NOT EXISTS emprestimo_devolucoes (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
emprestimo_id UUID NOT NULL REFERENCES emprestimos(id) ON DELETE CASCADE,
|
||||
valor_devolvido DECIMAL(10,2) NOT NULL,
|
||||
data_devolucao DATE NOT NULL DEFAULT CURRENT_DATE,
|
||||
observacoes TEXT,
|
||||
created_at TIMESTAMP DEFAULT NOW(),
|
||||
updated_at TIMESTAMP DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- =====================================================
|
||||
-- ÍNDICES
|
||||
-- =====================================================
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_emprestimos_pessoa ON emprestimos(pessoa);
|
||||
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_devolucoes_emprestimo ON emprestimo_devolucoes(emprestimo_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_devolucoes_data ON emprestimo_devolucoes(data_devolucao);
|
||||
|
||||
-- =====================================================
|
||||
-- TRIGGERS PARA UPDATED_AT
|
||||
-- =====================================================
|
||||
|
||||
CREATE TRIGGER update_emprestimos_updated_at
|
||||
BEFORE UPDATE ON emprestimos
|
||||
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
||||
|
||||
CREATE TRIGGER update_emprestimo_devolucoes_updated_at
|
||||
BEFORE UPDATE ON emprestimo_devolucoes
|
||||
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
||||
|
||||
-- =====================================================
|
||||
-- FUNÇÃO PARA ATUALIZAR VALOR RESTANTE
|
||||
-- =====================================================
|
||||
|
||||
CREATE OR REPLACE FUNCTION atualizar_valor_restante_emprestimo()
|
||||
RETURNS TRIGGER AS $$
|
||||
BEGIN
|
||||
-- Atualizar valor restante do empréstimo
|
||||
UPDATE emprestimos
|
||||
SET valor_restante = valor_total - (
|
||||
SELECT COALESCE(SUM(valor_devolvido), 0)
|
||||
FROM emprestimo_devolucoes
|
||||
WHERE emprestimo_id = NEW.emprestimo_id
|
||||
),
|
||||
status = CASE
|
||||
WHEN (valor_total - (
|
||||
SELECT COALESCE(SUM(valor_devolvido), 0)
|
||||
FROM emprestimo_devolucoes
|
||||
WHERE emprestimo_id = NEW.emprestimo_id
|
||||
)) <= 0 THEN 'quitado'
|
||||
ELSE 'ativo'
|
||||
END,
|
||||
updated_at = NOW()
|
||||
WHERE id = NEW.emprestimo_id;
|
||||
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
-- Trigger para atualizar automaticamente quando há devolução
|
||||
CREATE TRIGGER trigger_atualizar_valor_restante
|
||||
AFTER INSERT OR UPDATE OR DELETE ON emprestimo_devolucoes
|
||||
FOR EACH ROW EXECUTE FUNCTION atualizar_valor_restante_emprestimo();
|
||||
|
||||
-- =====================================================
|
||||
-- POLÍTICAS RLS (ROW LEVEL SECURITY)
|
||||
-- =====================================================
|
||||
|
||||
ALTER TABLE emprestimos ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE emprestimo_devolucoes 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 emprestimos FOR ALL USING (true);
|
||||
CREATE POLICY "Enable all operations for authenticated users" ON emprestimo_devolucoes FOR ALL USING (true);
|
||||
|
||||
-- =====================================================
|
||||
-- DADOS INICIAIS (OPCIONAL)
|
||||
-- =====================================================
|
||||
|
||||
-- Exemplo de empréstimo inicial (remover se não quiser)
|
||||
-- INSERT INTO emprestimos (pessoa, valor_total, valor_restante, descricao, data_emprestimo)
|
||||
-- VALUES ('Maiara', 500.00, 500.00, 'Empréstimo inicial para teste', CURRENT_DATE);
|
||||
Reference in New Issue
Block a user