Skip to content
4 changes: 4 additions & 0 deletions app/controllers/admin_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1434,6 +1434,10 @@ def referral_link_create
def active_teenagers_leaderboard
end

def new_teenagers_leaderboard
@link_creators = User.where(id: Referral::Link.select(:creator_id).map(&:creator_id).uniq).includes(:referral_links)
end

private

def stream_data(content_type, filename, data, download = true)
Expand Down
8 changes: 8 additions & 0 deletions app/models/referral/link.rb
Original file line number Diff line number Diff line change
Expand Up @@ -38,5 +38,13 @@ def value
slug.presence || hashid
end

def new_teenagers
attributions.joins(:user)
.where("EXTRACT(EPOCH FROM (referral_attributions.created_at - users.created_at)) < 60*60")
.where("users.teenager = true")
.map(&:user)
.uniq
end

end
end
7 changes: 7 additions & 0 deletions app/models/user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,9 @@ class User < ApplicationRecord
has_many :email_updates, class_name: "User::EmailUpdate", inverse_of: :user
has_many :email_updates_created, class_name: "User::EmailUpdate", inverse_of: :updated_by

has_many :referral_programs, class_name: "Referral::Program", inverse_of: :creator
has_many :referral_links, class_name: "Referral::Link", inverse_of: :creator

has_many :messages, class_name: "Ahoy::Message", as: :user

has_many :events, through: :organizer_positions
Expand Down Expand Up @@ -518,6 +521,10 @@ def managed_active_teenagers_count
User.active_teenager.joins(organizer_positions: :event).where(events: { id: managed_events }).distinct.count
end

def new_teenagers_from_referrals_count
self.referral_links.sum { |link| link.new_teenagers.length }
end

def has_discord_account?
discord_id.present?
end
Expand Down
18 changes: 18 additions & 0 deletions app/views/admin/new_teenagers_leaderboard.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<% title "New Teenagers Leaderboard" %>

<table>
<thead>
<tr>
<th>Name</th>
<th># of new teenagers</th>
</tr>
</thead>
<tbody>
<% @link_creators.sort_by { |u| -u.new_teenagers_from_referrals_count }.each do |user| %>
<tr>
<td><%= user_mention user %></td>
<td><%= user.referral_links.sum { |link| link.new_teenagers.length } %></td>
</tr>
<% end %>
</tbody>
</table>
1 change: 1 addition & 0 deletions config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,7 @@
get "unknown_merchants", to: "admin#unknown_merchants"
post "request_balance_export", to: "admin#request_balance_export"
get "active_teenagers_leaderboard", to: "admin#active_teenagers_leaderboard"
get "new_teenagers_leaderboard", to: "admin#new_teenagers_leaderboard"
end

member do
Expand Down