mirror of
https://github.com/SrIzan10/hc-harbor.git
synced 2026-05-01 10:45:21 +00:00
Switch omit_from_leaderboard bool to trust_level enum
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 %>
|
||||
|
||||
32
db/migrate/20250507204732_add_trust_level_to_users.rb
Normal file
32
db/migrate/20250507204732_add_trust_level_to_users.rb
Normal 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
4
db/schema.rb
generated
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user