59 lines
2.2 KiB
PL/PgSQL
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();
|