Switch omit_from_leaderboard bool to trust_level enum

This commit is contained in:
Max Wofford
2025-05-07 16:51:41 -04:00
parent dfdff16c4e
commit 8cdad3649f
4 changed files with 41 additions and 3 deletions

View File

@@ -6,6 +6,12 @@ class User < ApplicationRecord
validates :github_uid, uniqueness: true, allow_nil: true
validates :timezone, inclusion: { in: TZInfo::Timezone.all.map(&:identifier) }, allow_nil: false
enum :trust_level, {
default: 0,
untrusted: 1,
trusted: 2
}
has_many :heartbeats
has_many :email_addresses, dependent: :destroy
has_many :email_verification_requests, dependent: :destroy

View File

@@ -46,7 +46,7 @@
<% if @entries&.any? %>
<div class="leaderboard-entries">
<% @entries.each_with_index do |entry, index| %>
<div class="leaderboard-entry <%= 'current-user' if entry.user_id == current_user&.id %> <%= 'omitted' if entry.user.omit_from_leaderboard && current_user&.admin? %>">
<div class="leaderboard-entry <%= 'current-user' if entry.user_id == current_user&.id %> <%= 'omitted' if entry.user.untrusted? && current_user&.admin? %>">
<span class="rank">
<% case index %>
<% when 0 then %>

View File

@@ -0,0 +1,32 @@
class AddTrustLevelToUsers < ActiveRecord::Migration[7.1]
def up
add_column :users, :trust_level, :integer, default: 0, null: false
# Convert existing omit_from_leaderboard values
execute <<-SQL
UPDATE users#{' '}
SET trust_level = CASE#{' '}
WHEN omit_from_leaderboard = true THEN 1 -- untrusted
ELSE 0 -- default
END
SQL
# Remove the old column
remove_column :users, :omit_from_leaderboard
end
def down
add_column :users, :omit_from_leaderboard, :boolean, default: false, null: false
# Convert back
execute <<-SQL
UPDATE users#{' '}
SET omit_from_leaderboard = CASE#{' '}
WHEN trust_level = 1 THEN true -- untrusted
ELSE false -- default
END
SQL
remove_column :users, :trust_level
end
end

4
db/schema.rb generated
View File

@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[8.0].define(version: 2025_05_07_184341) do
ActiveRecord::Schema[8.0].define(version: 2025_05_07_204732) do
# These are extensions that must be enabled in order to support this database
enable_extension "pg_catalog.plpgsql"
@@ -309,7 +309,7 @@ ActiveRecord::Schema[8.0].define(version: 2025_05_07_184341) do
t.string "github_username"
t.string "slack_username"
t.string "slack_neighborhood_channel"
t.boolean "omit_from_leaderboard", default: false, null: false
t.integer "trust_level", default: 0, null: false
t.index ["slack_uid"], name: "index_users_on_slack_uid", unique: true
t.index ["timezone"], name: "index_users_on_timezone"
end