edit sql
This commit is contained in:
@@ -389,4 +389,94 @@ $$ LANGUAGE plpgsql;
|
|||||||
CREATE TRIGGER trigger_audit_requirements_groups
|
CREATE TRIGGER trigger_audit_requirements_groups
|
||||||
BEFORE UPDATE OR DELETE ON requirements_groups
|
BEFORE UPDATE OR DELETE ON requirements_groups
|
||||||
FOR EACH ROW
|
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();
|
||||||
Reference in New Issue
Block a user