🚀 Initial commit: Versão atual do TrackSteel APP

This commit is contained in:
2026-03-18 21:17:53 +00:00
commit bde410c9ad
633 changed files with 108150 additions and 0 deletions

View File

@@ -0,0 +1,137 @@
-- 1. Remover tabela e tipos existentes se existirem
DROP TABLE IF EXISTS public.atribuicoes CASCADE;
DROP TYPE IF EXISTS public.frequency_type CASCADE;
DROP TYPE IF EXISTS public.method_type CASCADE;
DROP TYPE IF EXISTS public.client_type CASCADE;
DROP TYPE IF EXISTS public.importance_type CASCADE;
DROP TYPE IF EXISTS public.duration_type CASCADE;
-- 2. Criar novos tipos ENUM
CREATE TYPE public.frequency_type AS ENUM (
'horaria',
'2xdia',
'diaria',
'2xsemanal',
'semanal',
'quinzenal',
'mensal'
);
CREATE TYPE public.method_type AS ENUM (
'impresso',
'sistema',
'sistema-impresso',
'email',
'verbal'
);
CREATE TYPE public.client_type AS ENUM (
'interno',
'processo',
'obra',
'contrato',
'geral'
);
CREATE TYPE public.importance_type AS ENUM (
'essencial',
'estrategico',
'suporte',
'informativo'
);
CREATE TYPE public.duration_type AS ENUM (
'<=1 hora',
'2 horas',
'4 horas',
'8 horas'
);
-- 3. Criar nova tabela atribuicoes
CREATE TABLE public.atribuicoes (
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
user_id UUID NOT NULL,
user_abbrev CHAR(3) NOT NULL DEFAULT 'USR',
attribution VARCHAR(300) NOT NULL,
frequency frequency_type NOT NULL,
method method_type NOT NULL,
client client_type NOT NULL,
importance importance_type NOT NULL,
duration duration_type NOT NULL,
created_by UUID NOT NULL,
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now()
);
-- 4. Habilitar RLS
ALTER TABLE public.atribuicoes ENABLE ROW LEVEL SECURITY;
-- 5. Criar políticas RLS
CREATE POLICY "View own or admin/diretoria all" ON public.atribuicoes
FOR SELECT USING (
is_admin_or_diretoria(auth.uid()) OR user_id = auth.uid()
);
CREATE POLICY "Only admin/diretoria can insert atribuições" ON public.atribuicoes
FOR INSERT WITH CHECK (
is_admin_or_diretoria(auth.uid()) AND created_by = auth.uid()
);
CREATE POLICY "Only admin/diretoria can update atribuições" ON public.atribuicoes
FOR UPDATE USING (is_admin_or_diretoria(auth.uid()));
CREATE POLICY "Only admin/diretoria can delete atribuições" ON public.atribuicoes
FOR DELETE USING (is_admin_or_diretoria(auth.uid()));
-- 6. Função para gerar abreviação automática do usuário
CREATE OR REPLACE FUNCTION public.generate_user_abbrev(_user_id UUID)
RETURNS TEXT
LANGUAGE plpgsql
SECURITY DEFINER
SET search_path = public
AS $$
DECLARE
name_text TEXT;
abbrev TEXT;
BEGIN
SELECT COALESCE(NULLIF(trim(p.full_name), ''), split_part(p.email, '@', 1))
INTO name_text
FROM public.profiles p
WHERE p.id = _user_id;
IF name_text IS NULL OR name_text = '' THEN
RETURN 'USR';
END IF;
abbrev := upper(substring(regexp_replace(name_text, '[^A-Za-z0-9]', '', 'g') from 1 for 3));
IF length(abbrev) < 3 THEN
abbrev := rpad(abbrev, 3, 'X');
END IF;
RETURN abbrev;
END;
$$;
-- 7. Trigger para definir valores padrão
CREATE OR REPLACE FUNCTION public.set_atribuicoes_defaults()
RETURNS TRIGGER
LANGUAGE plpgsql
AS $$
BEGIN
-- Ajustar abreviação se vier vazia ou inválida
IF NEW.user_abbrev IS NULL OR length(btrim(NEW.user_abbrev)) <> 3 THEN
NEW.user_abbrev := upper(substring(public.generate_user_abbrev(NEW.user_id) from 1 for 3));
ELSE
NEW.user_abbrev := upper(NEW.user_abbrev);
END IF;
NEW.updated_at := now();
RETURN NEW;
END;
$$;
CREATE TRIGGER set_atribuicoes_defaults_trigger
BEFORE INSERT OR UPDATE ON public.atribuicoes
FOR EACH ROW
EXECUTE FUNCTION public.set_atribuicoes_defaults();