From b447e1601372bcb1552880497d2321651b44fd2b Mon Sep 17 00:00:00 2001 From: Max Wofford Date: Thu, 13 Mar 2025 17:59:11 -0400 Subject: [PATCH] Switch leaderboard away from using slack id --- app/controllers/leaderboards_controller.rb | 4 ++-- app/jobs/leaderboard_update_job.rb | 8 ++++---- app/models/leaderboard_entry.rb | 5 ++--- app/views/leaderboards/_mini_leaderboard.html.erb | 4 ++-- 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/app/controllers/leaderboards_controller.rb b/app/controllers/leaderboards_controller.rb index a520b9a..71c86df 100644 --- a/app/controllers/leaderboards_controller.rb +++ b/app/controllers/leaderboards_controller.rb @@ -10,9 +10,9 @@ class LeaderboardsController < ApplicationController .includes(:user) .order(total_seconds: :desc) - tracked_user_ids = @leaderboard.entries.distinct.pluck(:slack_uid) + tracked_user_ids = @leaderboard.entries.distinct.pluck(:user_id) - @user_on_leaderboard = current_user && tracked_user_ids.include?(current_user.slack_uid) + @user_on_leaderboard = current_user && tracked_user_ids.include?(current_user.id) unless @user_on_leaderboard today = Time.current @untracked_entries = Hackatime::Heartbeat diff --git a/app/jobs/leaderboard_update_job.rb b/app/jobs/leaderboard_update_job.rb index 80b6b9e..51745b9 100644 --- a/app/jobs/leaderboard_update_job.rb +++ b/app/jobs/leaderboard_update_job.rb @@ -16,11 +16,11 @@ class LeaderboardUpdateJob < ApplicationJob leaderboard = Leaderboard.create!(start_date: parsed_date) # Get list of valid user IDs from our database - valid_slack_uids = User.pluck(:id) - return if valid_slack_uids.empty? + valid_user_ids = User.pluck(:id) + return if valid_user_ids.empty? ActiveRecord::Base.transaction do - valid_slack_uids.each_slice(BATCH_SIZE) do |batch_user_ids| + valid_user_ids.each_slice(BATCH_SIZE) do |batch_user_ids| entries_data = Heartbeat.where(user_id: batch_user_ids) .where(time: parsed_date.all_day) .group(:user_id) @@ -31,7 +31,7 @@ class LeaderboardUpdateJob < ApplicationJob entries_data = entries_data.map do |user_id, total_seconds| { leaderboard_id: leaderboard.id, - slack_uid: User.find(user_id).slack_uid, + user_id: user_id, total_seconds: total_seconds } end diff --git a/app/models/leaderboard_entry.rb b/app/models/leaderboard_entry.rb index 040baed..77dffe9 100644 --- a/app/models/leaderboard_entry.rb +++ b/app/models/leaderboard_entry.rb @@ -1,8 +1,7 @@ class LeaderboardEntry < ApplicationRecord belongs_to :leaderboard - belongs_to :user, primary_key: :slack_uid, foreign_key: :slack_uid + belongs_to :user - validates :slack_uid, presence: true validates :total_seconds, presence: true, numericality: { greater_than_or_equal_to: 0 } - validates :slack_uid, uniqueness: { scope: :leaderboard_id } + validates :user_id, uniqueness: { scope: :leaderboard_id } end diff --git a/app/views/leaderboards/_mini_leaderboard.html.erb b/app/views/leaderboards/_mini_leaderboard.html.erb index 8ceaba6..93aa7bd 100644 --- a/app/views/leaderboards/_mini_leaderboard.html.erb +++ b/app/views/leaderboards/_mini_leaderboard.html.erb @@ -1,7 +1,7 @@ <% entries = leaderboard.entries.includes(:user).order(total_seconds: :desc) if current_user - user_rank = entries.find_index { |entry| entry.slack_uid == current_user.slack_uid } + user_rank = entries.find_index { |entry| entry.user_id == current_user.id } if user_rank && user_rank >= 3 # Show top 2 entries and immediate competition top_entries = entries[0..1] @@ -25,7 +25,7 @@
<% mini_leaderboard_entries.each_with_index do |entry, idx| %> <% is_competition = !show_top_entries && idx >= 2 %> -
+
<% if !is_competition %> <% rank_emoji = case entries.index(entry) when 0 then "🥇"