From 18e440f57773e3c999d6a08050978fd5095a76c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A1vid=20Hal=C3=A1sz?= Date: Wed, 4 Sep 2024 16:29:22 +0200 Subject: [PATCH] feat(ModelV2): store slug when inserting into the v2_rules view --- db/functions/v2_rules_insert_v02.sql | 46 +++++++++++++++++++ ...e_function_v2_rules_insert_to_version_2.rb | 7 +++ db/schema.rb | 4 +- 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 db/functions/v2_rules_insert_v02.sql create mode 100644 db/migrate/20240904141834_update_function_v2_rules_insert_to_version_2.rb diff --git a/db/functions/v2_rules_insert_v02.sql b/db/functions/v2_rules_insert_v02.sql new file mode 100644 index 000000000..7fd9256c3 --- /dev/null +++ b/db/functions/v2_rules_insert_v02.sql @@ -0,0 +1,46 @@ +CREATE OR REPLACE FUNCTION v2_rules_insert() RETURNS trigger LANGUAGE plpgsql AS +$func$ +DECLARE result_id uuid; +BEGIN + INSERT INTO "rules" ( + "ref_id", + "slug", + "title", + "severity", + "description", + "rationale", + "created_at", + "updated_at", + "remediation_available", + "benchmark_id", + "upstream", + "precedence", + "rule_group_id", + "value_checks", + "identifier" + ) VALUES ( + NEW."ref_id", + LOWER(REGEXP_REPLACE(NEW."ref_id", '\.', '-', 'g')), + NEW."title", + NEW."severity", + NEW."description", + NEW."rationale", + NEW."created_at", + NEW."updated_at", + NEW."remediation_available", + NEW."security_guide_id", + NEW."upstream", + NEW."precedence", + NEW."rule_group_id", + NEW."value_checks", + NEW."identifier" + ) RETURNING "id" INTO "result_id"; + + -- Insert a new rule reference record separately + INSERT INTO "rule_references_containers" ("rule_references", "rule_id", "created_at", "updated_at") + SELECT NEW."references", "result_id", NOW(), NOW(); + + NEW."id" := "result_id"; + RETURN NEW; +END +$func$; diff --git a/db/migrate/20240904141834_update_function_v2_rules_insert_to_version_2.rb b/db/migrate/20240904141834_update_function_v2_rules_insert_to_version_2.rb new file mode 100644 index 000000000..09014cc65 --- /dev/null +++ b/db/migrate/20240904141834_update_function_v2_rules_insert_to_version_2.rb @@ -0,0 +1,7 @@ +class UpdateFunctionV2RulesInsertToVersion2 < ActiveRecord::Migration[7.1] + def change + drop_trigger :v2_rules_insert, on: :v2_rules + update_function :v2_rules_insert, version: 2, revert_to_version: 1 + create_trigger :v2_rules_insert, on: :v2_rules + end +end diff --git a/db/schema.rb b/db/schema.rb index 3884330f1..a4b55ce90 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.1].define(version: 2024_09_03_073330) do +ActiveRecord::Schema[7.1].define(version: 2024_09_04_141834) do create_schema "inventory" # These are extensions that must be enabled in order to support this database @@ -530,6 +530,7 @@ BEGIN INSERT INTO "rules" ( "ref_id", + "slug", "title", "severity", "description", @@ -545,6 +546,7 @@ "identifier" ) VALUES ( NEW."ref_id", + LOWER(REGEXP_REPLACE(NEW."ref_id", '\.', '-', 'g')), NEW."title", NEW."severity", NEW."description",