-- 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();