Skip to content

Commit

Permalink
Merge pull request #3236 from Uninett/bugfix/clean-dashboards-to-one-…
Browse files Browse the repository at this point in the history
…default

Ensure every account has exactly one default dashboard
  • Loading branch information
johannaengland authored Nov 25, 2024
2 parents f31d510 + 0071357 commit 855819a
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 0 deletions.
1 change: 1 addition & 0 deletions changelog.d/+migration-one-default-dashboard.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Ensure that each account has exactly one default dashboard
20 changes: 20 additions & 0 deletions python/nav/models/sql/changes/sc.05.12.0001.sql
Original file line number Diff line number Diff line change
@@ -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);
21 changes: 21 additions & 0 deletions python/nav/models/sql/changes/sc.05.12.0002.sql
Original file line number Diff line number Diff line change
@@ -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
)

0 comments on commit 855819a

Please sign in to comment.