REFACTOR: Track manual locked user levels separately from groups

This commit is contained in:
Robin Ward
2017-11-23 15:55:44 -05:00
parent 87ada55e67
commit 77f90876d3
24 changed files with 226 additions and 185 deletions

View File

@@ -83,6 +83,17 @@ ColumnDropper.drop(
}
)
ColumnDropper.drop(
table: 'users',
after_migration: 'AddTrustLevelLocksToUsers',
columns: %w[
trust_level_locked
],
on_drop: ->() {
STDERR.puts 'Removing user trust_level_locked!'
}
)
# User for the smoke tests
if ENV["SMOKE"] == "1"
UserEmail.seed do |ue|

View File

@@ -0,0 +1,27 @@
class AddTrustLevelLocksToUsers < ActiveRecord::Migration[5.1]
def up
add_column :users, :group_locked_trust_level, :integer, null: true
add_column :users, :manual_locked_trust_level, :integer, null: true
execute <<~SQL
UPDATE users SET manual_locked_trust_level = trust_level WHERE trust_level_locked
SQL
execute <<~SQL
UPDATE users SET group_locked_trust_level = x.tl
FROM users AS u
INNER JOIN (
SELECT gu.user_id, MAX(g.grant_trust_level) AS tl
FROM group_users AS gu
INNER JOIN groups AS g ON gu.group_id = g.id
WHERE g.grant_trust_level IS NOT NULL
GROUP BY gu.user_id
) AS x ON x.user_id = u.id
WHERE users.id = u.id
SQL
end
def down
raise ActiveRecord::IrreversibleMigration
end
end