Files
tracksteel_app/supabase/migrations/20250625232218-6e136861-7301-4f15-9fa9-07e9c76fc081.sql

71 lines
2.3 KiB
PL/PgSQL

-- Adicionar coluna para arquivamento na tabela sugestoes
ALTER TABLE public.sugestoes
ADD COLUMN archived_at TIMESTAMP WITH TIME ZONE,
ADD COLUMN archived_by UUID REFERENCES auth.users(id);
-- Criar tabela para notificações de sugestões
CREATE TABLE public.sugestao_notifications (
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
user_id UUID REFERENCES auth.users(id) NOT NULL,
sugestao_id UUID REFERENCES public.sugestoes(id) NOT NULL,
message TEXT NOT NULL,
is_read BOOLEAN DEFAULT false,
created_at TIMESTAMP WITH TIME ZONE DEFAULT now()
);
-- Habilitar RLS para notificações
ALTER TABLE public.sugestao_notifications ENABLE ROW LEVEL SECURITY;
-- Política para que usuários vejam apenas suas próprias notificações
CREATE POLICY "Usuários podem ver suas próprias notificações"
ON public.sugestao_notifications
FOR SELECT
TO authenticated
USING (auth.uid() = user_id);
-- Política para que usuários possam marcar suas notificações como lidas
CREATE POLICY "Usuários podem atualizar suas próprias notificações"
ON public.sugestao_notifications
FOR UPDATE
TO authenticated
USING (auth.uid() = user_id);
-- Função para criar notificação quando sugestão é implementada/rejeitada
CREATE OR REPLACE FUNCTION public.create_sugestao_notification()
RETURNS TRIGGER AS $$
BEGIN
-- Verificar se o status mudou para 'Implementada' ou 'Rejeitada'
IF NEW.status IN ('Implementada', 'Rejeitada') AND OLD.status = 'Pendente' THEN
INSERT INTO public.sugestao_notifications (user_id, sugestao_id, message)
VALUES (
NEW.user_id,
NEW.id,
CASE
WHEN NEW.status = 'Implementada' THEN 'Sua sugestão foi implementada!'
WHEN NEW.status = 'Rejeitada' THEN 'Sua sugestão foi rejeitada.'
END
);
-- Arquivar automaticamente a sugestão
NEW.archived_at = now();
NEW.archived_by = auth.uid();
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- Criar trigger para notificações
CREATE TRIGGER sugestao_status_notification
BEFORE UPDATE ON public.sugestoes
FOR EACH ROW
EXECUTE FUNCTION public.create_sugestao_notification();
-- Política para inserir notificações (via trigger)
CREATE POLICY "Sistema pode criar notificações"
ON public.sugestao_notifications
FOR INSERT
TO authenticated
WITH CHECK (true);