This commit is contained in:
gulimabr
2026-01-18 22:55:50 -03:00
parent 23290b3f3b
commit 384375a297

View File

@@ -389,4 +389,94 @@ $$ LANGUAGE plpgsql;
CREATE TRIGGER trigger_audit_requirements_groups
BEFORE UPDATE OR DELETE ON requirements_groups
FOR EACH ROW
EXECUTE FUNCTION archive_requirements_groups_change();
EXECUTE FUNCTION archive_requirements_groups_change();
-- ACCEPTANCE_CRITERIA: Individual conditions a requirement must meet
CREATE TABLE acceptance_criteria (
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
requirement_id INT NOT NULL,
criteria_text TEXT NOT NULL,
is_accepted BOOLEAN NOT NULL DEFAULT FALSE,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW(),
CONSTRAINT fk_ac_requirement FOREIGN KEY (requirement_id) REFERENCES requirements (id) ON DELETE CASCADE
);
-- Index for performance when loading a requirement's page
CREATE INDEX idx_ac_requirement ON acceptance_criteria(requirement_id);
CREATE OR REPLACE FUNCTION update_modified_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = NOW();
RETURN NEW;
END;
$$ language 'plpgsql';
CREATE TRIGGER update_ac_modtime
BEFORE UPDATE ON acceptance_criteria
FOR EACH ROW
EXECUTE FUNCTION update_modified_column();
-- Add editor tracking to the main table
ALTER TABLE acceptance_criteria
ADD COLUMN last_editor_id INT;
ALTER TABLE acceptance_criteria
ADD CONSTRAINT fk_ac_editor FOREIGN KEY (last_editor_id) REFERENCES users (id);
-- ACCEPTANCE_CRITERIA_HISTORY: Tracks changes to criteria and acceptance state
CREATE TABLE acceptance_criteria_history (
history_id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
original_ac_id INT NOT NULL,
requirement_id INT,
criteria_text TEXT,
is_accepted BOOLEAN,
valid_from TIMESTAMPTZ,
valid_to TIMESTAMPTZ DEFAULT NOW(),
edited_by INT,
CONSTRAINT fk_ach_user FOREIGN KEY (edited_by) REFERENCES users (id)
);
-- Index for auditing specific requirements
CREATE INDEX idx_ach_req ON acceptance_criteria_history(requirement_id);
-- Function to archive the state of an acceptance criterion
CREATE OR REPLACE FUNCTION archive_acceptance_criteria_change()
RETURNS TRIGGER AS $$
BEGIN
INSERT INTO acceptance_criteria_history (
original_ac_id,
requirement_id,
criteria_text,
is_accepted,
valid_from,
valid_to,
edited_by
)
VALUES (
OLD.id,
OLD.requirement_id,
OLD.criteria_text,
OLD.is_accepted,
OLD.updated_at, -- When this version started
NOW(), -- When this version was replaced/deleted
OLD.last_editor_id
);
IF (TG_OP = 'DELETE') THEN
RETURN OLD;
ELSE
NEW.updated_at := NOW(); -- Update the timestamp on the current record
RETURN NEW;
END IF;
END;
$$ LANGUAGE plpgsql;
-- Bind the trigger to the table
CREATE TRIGGER trigger_audit_acceptance_criteria
BEFORE UPDATE OR DELETE ON acceptance_criteria
FOR EACH ROW
EXECUTE FUNCTION archive_acceptance_criteria_change();