Files
tracksteel_app/supabase/migrations/create_equipamentos_emprestimos_table.sql

60 lines
2.3 KiB
PL/PgSQL

-- Criar tabela para histórico de empréstimos de equipamentos
CREATE TABLE public.equipamentos_emprestimos (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
equipamento_id UUID NOT NULL REFERENCES public.equipamentos(id) ON DELETE CASCADE,
of_number TEXT,
destino_outro TEXT,
data_saida DATE NOT NULL,
retirado_por UUID NOT NULL REFERENCES auth.users(id),
data_retorno DATE,
devolvido_por UUID REFERENCES auth.users(id),
status TEXT NOT NULL DEFAULT 'emprestado' CHECK (status IN ('emprestado', 'devolvido')),
observacoes TEXT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT now(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT now(),
created_by UUID REFERENCES auth.users(id),
-- Constraint para garantir que pelo menos um destino seja preenchido
CONSTRAINT check_destino CHECK (
(of_number IS NOT NULL AND of_number != '') OR
(destino_outro IS NOT NULL AND destino_outro != '')
)
);
-- Índices para melhorar performance
CREATE INDEX idx_equipamentos_emprestimos_equipamento_id ON public.equipamentos_emprestimos(equipamento_id);
CREATE INDEX idx_equipamentos_emprestimos_status ON public.equipamentos_emprestimos(status);
CREATE INDEX idx_equipamentos_emprestimos_data_saida ON public.equipamentos_emprestimos(data_saida);
-- Trigger para atualizar updated_at
CREATE OR REPLACE FUNCTION update_equipamentos_emprestimos_updated_at()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = now();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER update_equipamentos_emprestimos_updated_at
BEFORE UPDATE ON public.equipamentos_emprestimos
FOR EACH ROW EXECUTE FUNCTION update_equipamentos_emprestimos_updated_at();
-- Habilitar RLS
ALTER TABLE public.equipamentos_emprestimos ENABLE ROW LEVEL SECURITY;
-- Políticas RLS
CREATE POLICY "Usuários autenticados podem visualizar empréstimos"
ON public.equipamentos_emprestimos FOR SELECT
USING (auth.uid() IS NOT NULL);
CREATE POLICY "Usuários autenticados podem criar empréstimos"
ON public.equipamentos_emprestimos FOR INSERT
WITH CHECK (auth.uid() IS NOT NULL);
CREATE POLICY "Usuários autenticados podem atualizar empréstimos"
ON public.equipamentos_emprestimos FOR UPDATE
USING (auth.uid() IS NOT NULL);
CREATE POLICY "Usuários autenticados podem deletar empréstimos"
ON public.equipamentos_emprestimos FOR DELETE
USING (auth.uid() IS NOT NULL);