Files
tracksteel_app/supabase/migrations/20250726124231-0c0d0ec1-1357-4927-a2a0-64d0dcc9d057.sql

103 lines
3.5 KiB
PL/PgSQL

-- Criar tabela principal para prioridades de fabricação
CREATE TABLE public.prioridades_fabricacao (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
of_number TEXT NOT NULL,
etapa_fase TEXT NOT NULL,
prioridade_id UUID REFERENCES prioridades_config(id),
created_at TIMESTAMP WITH TIME ZONE DEFAULT now(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT now(),
created_by UUID REFERENCES profiles(id),
nome_prioridade TEXT NOT NULL,
ativo BOOLEAN DEFAULT true
);
-- Criar tabela para itens da prioridade
CREATE TABLE public.itens_prioridade_fabricacao (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
prioridade_fabricacao_id UUID REFERENCES prioridades_fabricacao(id) ON DELETE CASCADE,
peca_id UUID REFERENCES pecas(id),
quantidade_priorizada NUMERIC NOT NULL DEFAULT 0,
ordem_fabricacao INTEGER NOT NULL DEFAULT 1,
peso_total NUMERIC DEFAULT 0,
created_at TIMESTAMP WITH TIME ZONE DEFAULT now(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT now()
);
-- Habilitar RLS nas tabelas
ALTER TABLE public.prioridades_fabricacao ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.itens_prioridade_fabricacao ENABLE ROW LEVEL SECURITY;
-- Criar políticas RLS para prioridades_fabricacao
CREATE POLICY "Usuários autenticados podem visualizar prioridades"
ON public.prioridades_fabricacao
FOR SELECT
USING (auth.uid() IS NOT NULL);
CREATE POLICY "Usuários autenticados podem inserir prioridades"
ON public.prioridades_fabricacao
FOR INSERT
WITH CHECK (auth.uid() IS NOT NULL);
CREATE POLICY "Usuários autenticados podem atualizar prioridades"
ON public.prioridades_fabricacao
FOR UPDATE
USING (auth.uid() IS NOT NULL);
CREATE POLICY "Usuários autenticados podem deletar prioridades"
ON public.prioridades_fabricacao
FOR DELETE
USING (auth.uid() IS NOT NULL);
-- Criar políticas RLS para itens_prioridade_fabricacao
CREATE POLICY "Usuários autenticados podem visualizar itens prioridade"
ON public.itens_prioridade_fabricacao
FOR SELECT
USING (auth.uid() IS NOT NULL);
CREATE POLICY "Usuários autenticados podem inserir itens prioridade"
ON public.itens_prioridade_fabricacao
FOR INSERT
WITH CHECK (auth.uid() IS NOT NULL);
CREATE POLICY "Usuários autenticados podem atualizar itens prioridade"
ON public.itens_prioridade_fabricacao
FOR UPDATE
USING (auth.uid() IS NOT NULL);
CREATE POLICY "Usuários autenticados podem deletar itens prioridade"
ON public.itens_prioridade_fabricacao
FOR DELETE
USING (auth.uid() IS NOT NULL);
-- Criar trigger para atualizar updated_at
CREATE OR REPLACE FUNCTION update_prioridades_fabricacao_updated_at()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = now();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER update_prioridades_fabricacao_updated_at
BEFORE UPDATE ON public.prioridades_fabricacao
FOR EACH ROW
EXECUTE FUNCTION update_prioridades_fabricacao_updated_at();
CREATE OR REPLACE FUNCTION update_itens_prioridade_fabricacao_updated_at()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = now();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER update_itens_prioridade_fabricacao_updated_at
BEFORE UPDATE ON public.itens_prioridade_fabricacao
FOR EACH ROW
EXECUTE FUNCTION update_itens_prioridade_fabricacao_updated_at();
-- Criar índices para performance
CREATE INDEX idx_prioridades_fabricacao_of_fase ON public.prioridades_fabricacao(of_number, etapa_fase);
CREATE INDEX idx_itens_prioridade_ordem ON public.itens_prioridade_fabricacao(prioridade_fabricacao_id, ordem_fabricacao);