From 671ef33db96774891685c5d904693443f285d32a Mon Sep 17 00:00:00 2001 From: Louis Ramos Date: Sun, 12 Nov 2023 09:25:35 +0100 Subject: [PATCH 01/16] feat(pages): add link to patrons page in settings --- app/controllers/pages_controller.rb | 4 +++- app/views/pages/patrons.html.erb | 1 + app/views/users/edit.html.erb | 3 ++- config/routes.rb | 1 + 4 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 app/views/pages/patrons.html.erb diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index db0a76e6..64212059 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -2,7 +2,7 @@ class PagesController < ApplicationController skip_before_action :authenticate_user!, only: %i[admin code_of_conduct faq participation stats welcome] - before_action :render_countdown, only: %i[code_of_conduct faq participation setup stats welcome], if: :render_countdown? + before_action :render_countdown, only: %i[code_of_conduct faq participation patrons setup stats welcome], if: :render_countdown? def admin; end @@ -52,6 +52,8 @@ def participation @cities.sort_by! { |city| [city[:participation_ratio] * -1, city[:vanity_name]] } end + def patrons() end + def setup @private_leaderboard = ENV.fetch("AOC_ROOMS").split(",").last diff --git a/app/views/pages/patrons.html.erb b/app/views/pages/patrons.html.erb new file mode 100644 index 00000000..e965047a --- /dev/null +++ b/app/views/pages/patrons.html.erb @@ -0,0 +1 @@ +Hello diff --git a/app/views/users/edit.html.erb b/app/views/users/edit.html.erb index 39fdc87a..f5ce812e 100644 --- a/app/views/users/edit.html.erb +++ b/app/views/users/edit.html.erb @@ -77,7 +77,8 @@ <%= render PageTitleComponent.new(title: "Referral") %>

- When you share the event to your friends, ask them to add this referral code during the setup. This will boost your aura. + When you share the event to your friends, ask them to add this referral code during the setup. This will boost your + <%= link_to "aura", patrons_path, class: "strong hover:text-gold" %>.

diff --git a/config/routes.rb b/config/routes.rb index aa7c175d..e76f8081 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -58,6 +58,7 @@ def omniauth_callbacks(provider) authenticated :user, ->(user) { user.confirmed? } do get "/", to: "pages#calendar", as: :calendar get "/countdown", to: "pages#countdown" + get "/patrons", to: "pages#patrons" get "/campus/:slug", to: "campuses#show", as: :campus get "/city/:slug", to: "campuses#show", as: :city # Retrocompat in case of old links get "/day/:day", to: "days#show", as: :day, day: /[1-9]|1\d|2[0-5]/ From e3fa0c8a4a95800343af739ee9a343aabdcdba8c Mon Sep 17 00:00:00 2001 From: Louis Ramos Date: Sun, 12 Nov 2023 09:25:52 +0100 Subject: [PATCH 02/16] feat(pages): User aura formula --- app/models/user.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/models/user.rb b/app/models/user.rb index 7df970fd..2e69941a 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -79,6 +79,10 @@ def admin? uid.in?(ADMINS.values) end + def aura + 100 * Math.log(1 + referees.count, Math::E) + end + def confirmed? aoc_id.present? && accepted_coc && synced end From 58e81fd475883ee3332ee45c80c8177e5345ae55 Mon Sep 17 00:00:00 2001 From: Louis Ramos Date: Sun, 12 Nov 2023 10:22:53 +0100 Subject: [PATCH 03/16] feat(pages): query users with referrals and aura in PagesController#patrons --- app/controllers/pages_controller.rb | 9 ++++++++- app/models/user.rb | 8 ++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index 64212059..8aed28b4 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -52,7 +52,14 @@ def participation @cities.sort_by! { |city| [city[:participation_ratio] * -1, city[:vanity_name]] } end - def patrons() end + def patrons + @users = User + .select("users.username AS username, COUNT(referees.id) AS referrals") + .select("CASE WHEN COUNT(referees.id) > 0 THEN 100 * LN(4) ELSE 0 END AS aura") + .joins("LEFT JOIN users referees ON users.id = referees.referrer_id") + .group("users.id") + .order(aura: :desc) + end def setup @private_leaderboard = ENV.fetch("AOC_ROOMS").split(",").last diff --git a/app/models/user.rb b/app/models/user.rb index 2e69941a..25c431d0 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -53,6 +53,10 @@ class User < ApplicationRecord before_validation :assign_private_leaderboard, on: :create + def self.aura(referrals) + 100 * Math.log(1 + referrals, Math::E) + end + def self.from_kitt(auth) oldest_batch = auth.info&.schoolings&.min_by { |batch| batch.camp.starts_at } @@ -79,10 +83,6 @@ def admin? uid.in?(ADMINS.values) end - def aura - 100 * Math.log(1 + referees.count, Math::E) - end - def confirmed? aoc_id.present? && accepted_coc && synced end From 85c3d84207a14e9afbcd99e23323f5806f37cc7a Mon Sep 17 00:00:00 2001 From: Louis Ramos Date: Sun, 12 Nov 2023 10:29:55 +0100 Subject: [PATCH 04/16] feat(pages): patrons views --- app/controllers/pages_controller.rb | 4 ++-- app/models/user.rb | 2 +- app/views/pages/patrons.html.erb | 34 ++++++++++++++++++++++++++++- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index 8aed28b4..f1eca509 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -54,8 +54,8 @@ def participation def patrons @users = User - .select("users.username AS username, COUNT(referees.id) AS referrals") - .select("CASE WHEN COUNT(referees.id) > 0 THEN 100 * LN(4) ELSE 0 END AS aura") + .select("users.uid AS uid, users.username AS username, COUNT(referees.id) AS referrals") + .select("CASE WHEN COUNT(referees.id) > 0 THEN CEIL(100 * LN(4)) ELSE 0 END AS aura") .joins("LEFT JOIN users referees ON users.id = referees.referrer_id") .group("users.id") .order(aura: :desc) diff --git a/app/models/user.rb b/app/models/user.rb index 25c431d0..99189a77 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -54,7 +54,7 @@ class User < ApplicationRecord before_validation :assign_private_leaderboard, on: :create def self.aura(referrals) - 100 * Math.log(1 + referrals, Math::E) + (100 * Math.log(1 + referrals, Math::E)).ceil end def self.from_kitt(auth) diff --git a/app/views/pages/patrons.html.erb b/app/views/pages/patrons.html.erb index e965047a..c4026bd2 100644 --- a/app/views/pages/patrons.html.erb +++ b/app/views/pages/patrons.html.erb @@ -1 +1,33 @@ -Hello +<%= render PageTitleComponent.new(title: "Patrons") %> + +
+

Test goes here

+
+ + + + + + + + + + + + <% @users.each do |user| %> + + + + + + + + <% end %> + +
ReferralsAura
+ <%= link_to user[:username], profile_path(user[:uid]), class: "strong hover:text-gold" %> + + <%= user[:referrals] %> + + <%= user[:aura].to_i %> +
From 58d5785ff5d0a17433f27edd7e355a92c34cfdc9 Mon Sep 17 00:00:00 2001 From: Louis Ramos Date: Wed, 22 Nov 2023 19:22:21 +0100 Subject: [PATCH 05/16] fix(pages): add dynamic value for aura formula instead of 4 --- app/controllers/pages_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index f1eca509..509b4ddd 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -55,7 +55,7 @@ def participation def patrons @users = User .select("users.uid AS uid, users.username AS username, COUNT(referees.id) AS referrals") - .select("CASE WHEN COUNT(referees.id) > 0 THEN CEIL(100 * LN(4)) ELSE 0 END AS aura") + .select("CEIL(100 * LN(COUNT(referees.id) + 1)) AS aura") .joins("LEFT JOIN users referees ON users.id = referees.referrer_id") .group("users.id") .order(aura: :desc) From 3e92ca8ad12b3faaf40feef1b977b29396f20a17 Mon Sep 17 00:00:00 2001 From: Louis Ramos Date: Wed, 22 Nov 2023 19:23:02 +0100 Subject: [PATCH 06/16] fix(pages): remove User::aura --- app/models/user.rb | 4 ---- 1 file changed, 4 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index 99189a77..7df970fd 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -53,10 +53,6 @@ class User < ApplicationRecord before_validation :assign_private_leaderboard, on: :create - def self.aura(referrals) - (100 * Math.log(1 + referrals, Math::E)).ceil - end - def self.from_kitt(auth) oldest_batch = auth.info&.schoolings&.min_by { |batch| batch.camp.starts_at } From d01cabf1d5954c964b9fd089d374c22387ec8edb Mon Sep 17 00:00:00 2001 From: Louis Ramos Date: Wed, 22 Nov 2023 19:48:05 +0100 Subject: [PATCH 07/16] feat(pages): test PagesController#patrons @users --- Procfile.dev | 2 +- spec/controllers/pages_controller_spec.rb | 30 +++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 spec/controllers/pages_controller_spec.rb diff --git a/Procfile.dev b/Procfile.dev index 99abce16..88ff649b 100644 --- a/Procfile.dev +++ b/Procfile.dev @@ -1,3 +1,3 @@ -web: bin/rails server -p 3000 -b 0.0.0.0 +web: bin/rails server -p 3000 css: bin/rails tailwindcss:watch worker: bundle exec good_job start diff --git a/spec/controllers/pages_controller_spec.rb b/spec/controllers/pages_controller_spec.rb new file mode 100644 index 00000000..1916a372 --- /dev/null +++ b/spec/controllers/pages_controller_spec.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +require "rails_helper" + +RSpec.describe PagesController do + let!(:referrer) { create :user, uid: "1" } + let!(:referee_one) { create :user, username: "Aquaj", uid: "2", referrer: } + let!(:referee_two) { create :user, username: "wJoenn", uid: "3", referrer: } + let!(:referee_three) { create :user, username: "Aurrou", uid: "4", referrer: referee_one } + + describe "#patrons" do + it "requires to be authenticated", :logged_out do + get :patrons + + expect(response).to have_http_status :redirect + end + + it "queries the username, the amount of referees and the aura for every User" do + sign_in(referrer) + get :patrons + + expect(@controller.instance_variable_get(:@users).map(&:as_json)).to contain_exactly( + hash_including("uid" => "1", "username" => "pil0u", "referrals" => 2, "aura" => 110.0), + hash_including("uid" => "2", "username" => "Aquaj", "referrals" => 1, "aura" => 70.0), + hash_including("uid" => "3", "username" => "wJoenn", "referrals" => 0, "aura" => 0.0), + hash_including("uid" => "4", "username" => "Aurrou", "referrals" => 0, "aura" => 0.0) + ) + end + end +end From 197dacaa62d965a0419a8ccb78dadf2e5e28e39a Mon Sep 17 00:00:00 2001 From: Louis Ramos Date: Wed, 22 Nov 2023 21:10:12 +0100 Subject: [PATCH 08/16] kjgqvsefkjyuqzerljkhgfqezrekl;jgbb --- Procfile.dev | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Procfile.dev b/Procfile.dev index 88ff649b..99abce16 100644 --- a/Procfile.dev +++ b/Procfile.dev @@ -1,3 +1,3 @@ -web: bin/rails server -p 3000 +web: bin/rails server -p 3000 -b 0.0.0.0 css: bin/rails tailwindcss:watch worker: bundle exec good_job start From 0d7d9b6fd6c38056a3b1b08af993b029ff3f6cb9 Mon Sep 17 00:00:00 2001 From: pil0u <8350914+pil0u@users.noreply.github.com> Date: Wed, 22 Nov 2023 22:14:40 +0100 Subject: [PATCH 09/16] Create the referral_link method --- app/models/user.rb | 4 ++++ app/views/users/edit.html.erb | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/models/user.rb b/app/models/user.rb index 7df970fd..fea54f11 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -120,6 +120,10 @@ def referral_code "R#{uid.to_s.rjust(5, '0')}" end + def referral_link(request) + "#{request.base_url}/?referral_code=#{referral_code}" + end + def referrer_code referrer&.referral_code end diff --git a/app/views/users/edit.html.erb b/app/views/users/edit.html.erb index f5ce812e..75565665 100644 --- a/app/views/users/edit.html.erb +++ b/app/views/users/edit.html.erb @@ -96,7 +96,7 @@ class="button" data-controller="clipboard" data-action="click->clipboard#copy" - data-clipboard-content-value="<%= "#{request.base_url}/?referral_code=#{current_user.referral_code}" %>"> + data-clipboard-content-value="<%= current_user.referral_link(request) %>"> Copy invite link
From 04273c9fef9200c6218cc5fa71d76b6dc80a2f94 Mon Sep 17 00:00:00 2001 From: pil0u <8350914+pil0u@users.noreply.github.com> Date: Wed, 22 Nov 2023 22:22:43 +0100 Subject: [PATCH 10/16] Add light feedback on copy button click --- app/views/users/edit.html.erb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/users/edit.html.erb b/app/views/users/edit.html.erb index 75565665..b56b5c85 100644 --- a/app/views/users/edit.html.erb +++ b/app/views/users/edit.html.erb @@ -85,7 +85,7 @@