From 92cc0c634f6dee9b0676238928ce5e04c7db0a51 Mon Sep 17 00:00:00 2001 From: Stephen Hand Date: Sat, 11 Nov 2023 13:16:16 +0000 Subject: [PATCH 1/5] Fix categories migration rollback --- ...14100-migrate-categories-to-top-rawjson.js | 44 +++++++++++++++++-- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/hrm-domain/hrm-service/migrations/20230926114100-migrate-categories-to-top-rawjson.js b/hrm-domain/hrm-service/migrations/20230926114100-migrate-categories-to-top-rawjson.js index 43d515794..d9fbc1fdf 100644 --- a/hrm-domain/hrm-service/migrations/20230926114100-migrate-categories-to-top-rawjson.js +++ b/hrm-domain/hrm-service/migrations/20230926114100-migrate-categories-to-top-rawjson.js @@ -67,9 +67,47 @@ module.exports = { down: async queryInterface => { await queryInterface.sequelize.query(` - UPDATE "Contacts" SET "rawJson" = (COALESCE("rawJson", '{}'::JSONB) +UPDATE "Contacts" cupdate SET "rawJson" = ((COALESCE("rawJson", '{}'::JSONB) -- Case Information and / or category patch - || (jsonb_build_object('caseInformation', "rawJson"->'caseInformation') || jsonb_build_object('categories', "rawJson"->'categories')) - ) - 'categories'`); + || jsonb_build_object('caseInformation', "rawJson"->'caseInformation' || jsonb_build_object('categories', "contactCategoryMaps"."categoryMap")) + ) - 'categories') FROM + ( + -- Convert the full expansion to the + -- Probably a less verbose way to do this, but it is a one off migration, so meh. + SELECT + id AS "contactId", "accountSid", jsonb_object_agg(category, subcategories) AS "categoryMap" + FROM ( + SELECT + id, "accountSid", category, jsonb_object_agg(subcategory, subcategoryFlag) as subcategories + FROM + ( + SELECT + id, "accountSid", + category, + subcategoryRecord AS subcategory, + true AS subcategoryFlag + FROM + ( + SELECT + id, "accountSid", + (category).key AS category, + jsonb_array_elements_text((category).value) AS subcategoryRecord + FROM + ( + SELECT + id, "accountSid", + jsonb_each("rawJson"->'categories') as category + FROM "Contacts" + ) AS expansion1 + ) AS expansion2 + ) + AS expansion3 + GROUP BY id, "accountSid", category + ) + AS recompact + GROUP BY id, "accountSid" + ) AS "contactCategoryMaps" +WHERE "contactCategoryMaps"."contactId" = cupdate.id AND "contactCategoryMaps"."accountSid" = cupdate."accountSid" + `); }, }; From 4d59f7bd399d5fed022aacff2213405b4622565c Mon Sep 17 00:00:00 2001 From: Stephen Hand Date: Sat, 11 Nov 2023 13:58:36 +0000 Subject: [PATCH 2/5] Fix categories migration rollback --- ...0231006194800-contact_taskId_unique.sql.js | 2 +- .../sql/1.12.0-1.11.1-rollback.sql | 55 +++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 hrm-domain/hrm-service/sql/1.12.0-1.11.1-rollback.sql diff --git a/hrm-domain/hrm-service/migrations/20231006194800-contact_taskId_unique.sql.js b/hrm-domain/hrm-service/migrations/20231006194800-contact_taskId_unique.sql.js index e4a9ca8a3..2d8d11f4c 100644 --- a/hrm-domain/hrm-service/migrations/20231006194800-contact_taskId_unique.sql.js +++ b/hrm-domain/hrm-service/migrations/20231006194800-contact_taskId_unique.sql.js @@ -44,7 +44,7 @@ module.exports = { down: async queryInterface => { await queryInterface.sequelize.query( - `DROP INDEX IF EXISTS public."Contacts_taskId_idx"`, + `DROP INDEX IF EXISTS public."Contacts_taskId_accountSid_idx"`, ); console.log('TaskId unique index dropped'); }, diff --git a/hrm-domain/hrm-service/sql/1.12.0-1.11.1-rollback.sql b/hrm-domain/hrm-service/sql/1.12.0-1.11.1-rollback.sql new file mode 100644 index 000000000..e51d30569 --- /dev/null +++ b/hrm-domain/hrm-service/sql/1.12.0-1.11.1-rollback.sql @@ -0,0 +1,55 @@ +ALTER TABLE public."Contacts" + DROP COLUMN IF EXISTS "finalizedAt"; + +DELETE + FROM public."SequelizeMeta" WHERE "name" LIKE '20231010145200%'; + +DROP INDEX IF EXISTS public."Contacts_taskId_accountSid_idx"; + +DELETE + FROM public."SequelizeMeta" WHERE "name" LIKE '20231006%'; + +UPDATE "Contacts" cupdate SET "rawJson" = ((COALESCE("rawJson", '{}'::JSONB) + -- Case Information and / or category patch + || jsonb_build_object('caseInformation', "rawJson"->'caseInformation' || jsonb_build_object('categories', "contactCategoryMaps"."categoryMap")) + ) - 'categories') FROM + ( + -- Convert the full expansion to the + -- Probably a less verbose way to do this, but it is a one off migration, so meh. + SELECT + id AS "contactId", "accountSid", jsonb_object_agg(category, subcategories) AS "categoryMap" + FROM ( + SELECT + id, "accountSid", category, jsonb_object_agg(subcategory, subcategoryFlag) as subcategories + FROM + ( + SELECT + id, "accountSid", + category, + subcategoryRecord AS subcategory, + true AS subcategoryFlag + FROM + ( + SELECT + id, "accountSid", + (category).key AS category, + jsonb_array_elements_text((category).value) AS subcategoryRecord + FROM + ( + SELECT + id, "accountSid", + jsonb_each("rawJson"->'categories') as category + FROM "Contacts" + ) AS expansion1 + ) AS expansion2 + ) + AS expansion3 + GROUP BY id, "accountSid", category + ) + AS recompact + GROUP BY id, "accountSid" + ) AS "contactCategoryMaps" +WHERE "contactCategoryMaps"."contactId" = cupdate.id AND "contactCategoryMaps"."accountSid" = cupdate."accountSid"; + +DELETE + FROM public."SequelizeMeta" WHERE "name" LIKE '20230926%'; \ No newline at end of file From 78b4599d391f00cf8d395dfdb30d24f54776276b Mon Sep 17 00:00:00 2001 From: Stephen Hand Date: Sat, 11 Nov 2023 14:00:12 +0000 Subject: [PATCH 3/5] Licence header --- .../hrm-service/sql/1.12.0-1.11.1-rollback.sql | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/hrm-domain/hrm-service/sql/1.12.0-1.11.1-rollback.sql b/hrm-domain/hrm-service/sql/1.12.0-1.11.1-rollback.sql index e51d30569..2351971fb 100644 --- a/hrm-domain/hrm-service/sql/1.12.0-1.11.1-rollback.sql +++ b/hrm-domain/hrm-service/sql/1.12.0-1.11.1-rollback.sql @@ -1,3 +1,17 @@ +-- Copyright (C) 2021-2023 Technology Matters +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU Affero General Public License as published +-- by the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU Affero General Public License for more details. +-- +-- You should have received a copy of the GNU Affero General Public License +-- along with this program. If not, see https://www.gnu.org/licenses/. + ALTER TABLE public."Contacts" DROP COLUMN IF EXISTS "finalizedAt"; From d94170eff5ef850ab9b80aa6930c189b91fb8985 Mon Sep 17 00:00:00 2001 From: Stephen Hand Date: Sat, 11 Nov 2023 15:08:09 +0000 Subject: [PATCH 4/5] Fix call summary --- hrm-domain/hrm-service/sql/1.12.0-1.11.1-rollback.sql | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/hrm-domain/hrm-service/sql/1.12.0-1.11.1-rollback.sql b/hrm-domain/hrm-service/sql/1.12.0-1.11.1-rollback.sql index 2351971fb..2e661a1ba 100644 --- a/hrm-domain/hrm-service/sql/1.12.0-1.11.1-rollback.sql +++ b/hrm-domain/hrm-service/sql/1.12.0-1.11.1-rollback.sql @@ -66,4 +66,9 @@ UPDATE "Contacts" cupdate SET "rawJson" = ((COALESCE("rawJson", '{}'::JSONB) WHERE "contactCategoryMaps"."contactId" = cupdate.id AND "contactCategoryMaps"."accountSid" = cupdate."accountSid"; DELETE - FROM public."SequelizeMeta" WHERE "name" LIKE '20230926%'; \ No newline at end of file + FROM public."SequelizeMeta" WHERE "name" LIKE '20230926%'; + +UPDATE "Contacts" SET "rawJson" = COALESCE("rawJson", '{}'::JSONB) + -- Case Information and placeholder case summary + || jsonb_build_object('caseInformation', "rawJson"->'caseInformation' || jsonb_build_object('callSummary', COALESCE("rawJson"->'caseInformation'->>'callSummary', '')) + ) \ No newline at end of file From 441f1b483f19cb4572ba51577c36305a6b913129 Mon Sep 17 00:00:00 2001 From: Stephen Hand Date: Mon, 13 Nov 2023 13:20:52 +0000 Subject: [PATCH 5/5] Fix rollback sequelizemeta update --- hrm-domain/hrm-service/sql/1.12.0-1.11.1-rollback.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hrm-domain/hrm-service/sql/1.12.0-1.11.1-rollback.sql b/hrm-domain/hrm-service/sql/1.12.0-1.11.1-rollback.sql index 2e661a1ba..86e23745b 100644 --- a/hrm-domain/hrm-service/sql/1.12.0-1.11.1-rollback.sql +++ b/hrm-domain/hrm-service/sql/1.12.0-1.11.1-rollback.sql @@ -66,7 +66,7 @@ UPDATE "Contacts" cupdate SET "rawJson" = ((COALESCE("rawJson", '{}'::JSONB) WHERE "contactCategoryMaps"."contactId" = cupdate.id AND "contactCategoryMaps"."accountSid" = cupdate."accountSid"; DELETE - FROM public."SequelizeMeta" WHERE "name" LIKE '20230926%'; + FROM public."SequelizeMeta" WHERE "name" LIKE '20230926114100%'; UPDATE "Contacts" SET "rawJson" = COALESCE("rawJson", '{}'::JSONB) -- Case Information and placeholder case summary