edit sql
This commit is contained in:
@@ -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();
|
||||
Reference in New Issue
Block a user