🚀 Initial commit: Versão atual do TrackSteel APP
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
|
||||
-- 1) Sequência para geração do código "EQ-001"
|
||||
CREATE SEQUENCE IF NOT EXISTS public.equipamentos_codigo_seq START 1;
|
||||
|
||||
-- 2) Tabela principal
|
||||
CREATE TABLE IF NOT EXISTS public.equipamentos (
|
||||
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
codigo text UNIQUE NOT NULL,
|
||||
descricao text NOT NULL,
|
||||
capacidade text,
|
||||
quantidade integer NOT NULL DEFAULT 1,
|
||||
local_estoque text NOT NULL,
|
||||
propriedade text NOT NULL DEFAULT 'proprio',
|
||||
validade_calibracao date,
|
||||
certificado_calibracao text,
|
||||
periodicidade_calibracao integer,
|
||||
of_number text,
|
||||
destino_outro text,
|
||||
data_saida date,
|
||||
retirado_por uuid,
|
||||
data_retorno date,
|
||||
devolvido_por uuid,
|
||||
observacoes text,
|
||||
created_by uuid,
|
||||
created_at timestamptz NOT NULL DEFAULT now(),
|
||||
updated_at timestamptz NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
-- 3) Função/trigger para definir codigo e created_by no insert
|
||||
CREATE OR REPLACE FUNCTION public.equipamentos_before_insert()
|
||||
RETURNS trigger
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
BEGIN
|
||||
IF NEW.codigo IS NULL OR length(trim(NEW.codigo)) = 0 THEN
|
||||
NEW.codigo := 'EQ-' || lpad(nextval('public.equipamentos_codigo_seq')::text, 3, '0');
|
||||
END IF;
|
||||
|
||||
IF NEW.created_by IS NULL THEN
|
||||
NEW.created_by := auth.uid();
|
||||
END IF;
|
||||
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$;
|
||||
|
||||
-- 4) Função/trigger para atualizar updated_at no update
|
||||
CREATE OR REPLACE FUNCTION public.set_updated_at()
|
||||
RETURNS trigger
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
BEGIN
|
||||
NEW.updated_at := now();
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$;
|
||||
|
||||
-- 5) Criação dos triggers
|
||||
DROP TRIGGER IF EXISTS equipamentos_set_defaults ON public.equipamentos;
|
||||
CREATE TRIGGER equipamentos_set_defaults
|
||||
BEFORE INSERT ON public.equipamentos
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION public.equipamentos_before_insert();
|
||||
|
||||
DROP TRIGGER IF EXISTS equipamentos_updated_at ON public.equipamentos;
|
||||
CREATE TRIGGER equipamentos_updated_at
|
||||
BEFORE UPDATE ON public.equipamentos
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION public.set_updated_at();
|
||||
|
||||
-- 6) RLS e políticas
|
||||
ALTER TABLE public.equipamentos ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
DROP POLICY IF EXISTS "Equipamentos select" ON public.equipamentos;
|
||||
CREATE POLICY "Equipamentos select"
|
||||
ON public.equipamentos
|
||||
FOR SELECT
|
||||
USING (auth.uid() IS NOT NULL);
|
||||
|
||||
DROP POLICY IF EXISTS "Equipamentos insert" ON public.equipamentos;
|
||||
CREATE POLICY "Equipamentos insert"
|
||||
ON public.equipamentos
|
||||
FOR INSERT
|
||||
WITH CHECK (auth.uid() IS NOT NULL);
|
||||
|
||||
DROP POLICY IF EXISTS "Equipamentos update" ON public.equipamentos;
|
||||
CREATE POLICY "Equipamentos update"
|
||||
ON public.equipamentos
|
||||
FOR UPDATE
|
||||
USING (auth.uid() IS NOT NULL);
|
||||
|
||||
DROP POLICY IF EXISTS "Equipamentos delete" ON public.equipamentos;
|
||||
CREATE POLICY "Equipamentos delete"
|
||||
ON public.equipamentos
|
||||
FOR DELETE
|
||||
USING (auth.uid() IS NOT NULL);
|
||||
|
||||
-- 7) Registrar recurso na tabela de interface (para controle de acesso por recurso)
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM public.interface_resources WHERE resource_key = 'equipamentos'
|
||||
) THEN
|
||||
INSERT INTO public.interface_resources (resource_name, resource_key, route_path, icon_name, created_at, updated_at)
|
||||
VALUES ('Equipamentos', 'equipamentos', '/equipamentos', 'Wrench', now(), now());
|
||||
END IF;
|
||||
END $$;
|
||||
Reference in New Issue
Block a user