JC-Aguiar / DetMakerServer

Back-end para a API DET-MAKER (projeto dedicado para gestão automática de jobs da peopleware)
GNU Affero General Public License v3.0
1 stars 0 forks source link

Evidências: imutabilidade #28

Open JC-Aguiar opened 11 months ago

JC-Aguiar commented 11 months ago

Descrição

Fazer com que os campos de revisão de uma Evidência sejam inalteráveis depois de salvos no banco.

Sugestões

1) Triggers para Campos

Restringir especificamente os campos em que o revisor preencher.

CREATE OR REPLACE TRIGGER ${trigger-nome}
BEFORE UPDATE ON ${tabela}
FOR EACH ROW
BEGIN
    IF (:OLD.${campo1} IS NOT NULL AND :NEW.${campo1} <> :OLD.${campo1}) OR
       (:OLD.${campo2} IS NOT NULL AND :NEW.${campo2} <> :OLD.${campo2}) OR
       (:OLD.${campo3} IS NOT NULL AND :NEW.${campo3} <> :OLD.${campo3}) THEN
            RAISE_APPLICATION_ERROR(-20001, 'Imutabilidade violada. Um ou mais campos imutáveis estão sendo alterados.');
    END IF;
END;

2) Triggers para a Tabela

Remover os campos do revisor da tabela de Evidências, movendo-os para uma nova Tabela (nova entidade no Java) e lá criar a restrição contra qualquer atualização. Por conta disso, o mapeamento entre a nova tabela e Evidências deve ser unidirecional, e estar declarado somente na nova tabela.

CREATE OR REPLACE TRIGGER ${trigger-nome}
BEFORE UPDATE ON ${tabela}
BEGIN
    RAISE_APPLICATION_ERROR(-20001, 'Imutabilidade violada. Atualizações nesta tabela são proibidas.');
END;
JC-Aguiar commented 11 months ago

Atualização

A restrição de imutabilidade (de TODOS os campos) deve também ser aplicada na entidade Evidência