mirror of
https://github.com/SrIzan10/hc-harbor.git
synced 2026-05-01 10:45:21 +00:00
Switch leaderboard away from using slack id
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 @@
|
||||
<div class="leaderboard-entries">
|
||||
<% mini_leaderboard_entries.each_with_index do |entry, idx| %>
|
||||
<% is_competition = !show_top_entries && idx >= 2 %>
|
||||
<div class="leaderboard-entry <%= 'current-user' if entry.slack_uid == current_user&.slack_uid %>">
|
||||
<div class="leaderboard-entry <%= 'current-user' if entry.user_id == current_user&.id %>">
|
||||
<% if !is_competition %>
|
||||
<% rank_emoji = case entries.index(entry)
|
||||
when 0 then "🥇"
|
||||
|
||||
Reference in New Issue
Block a user