From 2c061fbfb41778ada34235d24ac313d69d646655 Mon Sep 17 00:00:00 2001 From: Johanna England Date: Fri, 22 Nov 2024 10:00:28 +0100 Subject: [PATCH 1/3] Set a default dashboard if none exists --- .../nav/models/sql/changes/sc.05.12.0001.sql | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 python/nav/models/sql/changes/sc.05.12.0001.sql diff --git a/python/nav/models/sql/changes/sc.05.12.0001.sql b/python/nav/models/sql/changes/sc.05.12.0001.sql new file mode 100644 index 0000000000..3191494f5a --- /dev/null +++ b/python/nav/models/sql/changes/sc.05.12.0001.sql @@ -0,0 +1,20 @@ +-- This migration is to ensure that for accounts that don't have a default +-- dashboard we set a default dashboard + +-- This part finds the row with the lowest id for any account that does not +-- have a default dashboard +WITH CTE AS ( + SELECT MIN(id) as id + FROM account_dashboard a + WHERE NOT EXISTS ( + SELECT 1 + FROM account_dashboard b + WHERE a.account_id = b.account_id + AND b.is_default = TRUE + ) + GROUP BY account_id +) +-- And this part sets is_default for that row to true +UPDATE account_dashboard +SET is_default = TRUE +WHERE id IN (SELECT id FROM CTE); \ No newline at end of file From 49f7513d39404a824c374e2eec3731089787defb Mon Sep 17 00:00:00 2001 From: Johanna England Date: Fri, 22 Nov 2024 10:17:48 +0100 Subject: [PATCH 2/3] Ensure only one dashboard per user is default --- .../nav/models/sql/changes/sc.05.12.0002.sql | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 python/nav/models/sql/changes/sc.05.12.0002.sql diff --git a/python/nav/models/sql/changes/sc.05.12.0002.sql b/python/nav/models/sql/changes/sc.05.12.0002.sql new file mode 100644 index 0000000000..612b53f10d --- /dev/null +++ b/python/nav/models/sql/changes/sc.05.12.0002.sql @@ -0,0 +1,21 @@ +-- This migration is to ensure that for accounts that have more than one +-- default dashboard we set is_default to false for all except for one + +UPDATE account_dashboard +SET is_default = FALSE +WHERE id NOT IN ( + -- This part finds the lowest id of the default dashboards for each + -- account_id + SELECT MIN(id) + FROM account_dashboard + WHERE is_default = TRUE + GROUP BY account_id +) +AND account_id IN ( + -- This part finds all account_ids that have more than one default dashboard + SELECT account_id + FROM account_dashboard + WHERE is_default = TRUE + GROUP BY account_id + HAVING COUNT(account_id) > 1 +) \ No newline at end of file From 007135711f1345dba13611a9e2071a97a0504e3b Mon Sep 17 00:00:00 2001 From: Johanna England Date: Fri, 22 Nov 2024 10:28:49 +0100 Subject: [PATCH 3/3] Add news fragment --- changelog.d/+migration-one-default-dashboard.fixed.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/+migration-one-default-dashboard.fixed.md diff --git a/changelog.d/+migration-one-default-dashboard.fixed.md b/changelog.d/+migration-one-default-dashboard.fixed.md new file mode 100644 index 0000000000..54bd4ec8a5 --- /dev/null +++ b/changelog.d/+migration-one-default-dashboard.fixed.md @@ -0,0 +1 @@ +Ensure that each account has exactly one default dashboard \ No newline at end of file