From 8cdad3649f75f0c7f24ea1f384c508743c7c1bd3 Mon Sep 17 00:00:00 2001 From: Max Wofford Date: Wed, 7 May 2025 16:51:41 -0400 Subject: [PATCH] Switch omit_from_leaderboard bool to trust_level enum --- app/models/user.rb | 6 ++++ app/views/leaderboards/index.html.erb | 2 +- ...20250507204732_add_trust_level_to_users.rb | 32 +++++++++++++++++++ db/schema.rb | 4 +-- 4 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 db/migrate/20250507204732_add_trust_level_to_users.rb diff --git a/app/models/user.rb b/app/models/user.rb index d41708d..d28cb61 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -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 diff --git a/app/views/leaderboards/index.html.erb b/app/views/leaderboards/index.html.erb index e354aed..31bdc07 100644 --- a/app/views/leaderboards/index.html.erb +++ b/app/views/leaderboards/index.html.erb @@ -46,7 +46,7 @@ <% if @entries&.any? %>
<% @entries.each_with_index do |entry, index| %> -
+
<% case index %> <% when 0 then %> diff --git a/db/migrate/20250507204732_add_trust_level_to_users.rb b/db/migrate/20250507204732_add_trust_level_to_users.rb new file mode 100644 index 0000000..5d3b532 --- /dev/null +++ b/db/migrate/20250507204732_add_trust_level_to_users.rb @@ -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 diff --git a/db/schema.rb b/db/schema.rb index 774a2a7..ca5498a 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -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