Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ensure every account has exactly one default dashboard #3236

Merged
merged 3 commits into from
Nov 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Comment on lines +1 to +2
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just leaving a quick comment before the weekend: This is the weakness of NAV's homegrown migration system: This migration file will conflict with #3231. One of us needs to change our PR accordingly :)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Indeed, let's see who it will be 😅


-- 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
)
Loading