Files
dbmaker/supabase/migrations/007_add_archived_status.sql

59 lines
2.2 KiB
PL/PgSQL

-- Adicionar status 'arquivado' aos projetos
ALTER TABLE projetos DROP CONSTRAINT IF EXISTS projetos_status_check;
ALTER TABLE projetos ADD CONSTRAINT projetos_status_check
CHECK (status IN ('rascunho', 'em_andamento', 'revisao', 'finalizado', 'cancelado', 'arquivado'));
-- Adicionar campo 'ativo' à tabela templates_topicos (soft delete)
ALTER TABLE templates_topicos ADD COLUMN IF NOT EXISTS ativo BOOLEAN DEFAULT TRUE;
CREATE INDEX IF NOT EXISTS idx_topicos_ativo ON templates_topicos(ativo);
-- Adicionar campo 'inativado_em' para rastreamento
ALTER TABLE templates_topicos ADD COLUMN IF NOT EXISTS inativado_em TIMESTAMP;
ALTER TABLE templates_customizados ADD COLUMN IF NOT EXISTS inativado_em TIMESTAMP;
-- Comentários explicativos
COMMENT ON COLUMN templates_topicos.ativo IS 'Soft delete: FALSE oculta o tópico de novas criações mas mantém em databooks existentes';
COMMENT ON COLUMN templates_customizados.ativo IS 'Soft delete: FALSE oculta o template de novas criações mas mantém em databooks existentes';
-- Criar função para "soft delete" de templates
CREATE OR REPLACE FUNCTION soft_delete_template()
RETURNS TRIGGER AS $$
BEGIN
-- Ao invés de deletar, marca como inativo
UPDATE templates_customizados
SET ativo = FALSE, inativado_em = NOW()
WHERE id = OLD.id;
-- Impede a exclusão física
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
-- Criar trigger para soft delete de templates
DROP TRIGGER IF EXISTS prevent_template_hard_delete ON templates_customizados;
CREATE TRIGGER prevent_template_hard_delete
BEFORE DELETE ON templates_customizados
FOR EACH ROW
EXECUTE FUNCTION soft_delete_template();
-- Criar função para "soft delete" de tópicos
CREATE OR REPLACE FUNCTION soft_delete_topico()
RETURNS TRIGGER AS $$
BEGIN
-- Ao invés de deletar, marca como inativo
UPDATE templates_topicos
SET ativo = FALSE, inativado_em = NOW()
WHERE id = OLD.id;
-- Impede a exclusão física
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
-- Criar trigger para soft delete de tópicos
DROP TRIGGER IF EXISTS prevent_topico_hard_delete ON templates_topicos;
CREATE TRIGGER prevent_topico_hard_delete
BEFORE DELETE ON templates_topicos
FOR EACH ROW
EXECUTE FUNCTION soft_delete_topico();