🚀 Initial commit: Versão atual do TrackSteel APP
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
|
||||
-- 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);
|
||||
Reference in New Issue
Block a user