From 2a3d0784e2b25904a888c91e87b6377c80ca4497 Mon Sep 17 00:00:00 2001 From: Seth Call Date: Fri, 7 Mar 2025 16:38:44 -0600 Subject: [PATCH] try to aggressively update signups --- .../components/affiliate/JKAffiliateSignup.js | 6 ++-- ruby/lib/jam_ruby/models/affiliate_partner.rb | 33 ++++++++++++++++++- ruby/lib/jam_ruby/models/user.rb | 3 ++ 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/jam-ui/src/components/affiliate/JKAffiliateSignup.js b/jam-ui/src/components/affiliate/JKAffiliateSignup.js index cca8ebfc1..5ea5b9b30 100644 --- a/jam-ui/src/components/affiliate/JKAffiliateSignup.js +++ b/jam-ui/src/components/affiliate/JKAffiliateSignup.js @@ -9,7 +9,7 @@ const JKAffiliateSignup = ({signup}) => { {greaterThan.sm ? ( {signup.month} - {signup.visits} + {/*{signup.visits}*/} {signup.signups} ) : ( @@ -17,11 +17,11 @@ const JKAffiliateSignup = ({signup}) => { {signup.month} - + {/* Visits: {signup.visits} - + */} Signups: {signup.signups} diff --git a/ruby/lib/jam_ruby/models/affiliate_partner.rb b/ruby/lib/jam_ruby/models/affiliate_partner.rb index 8c3a7f354..2cdbb6bf3 100644 --- a/ruby/lib/jam_ruby/models/affiliate_partner.rb +++ b/ruby/lib/jam_ruby/models/affiliate_partner.rb @@ -227,7 +227,8 @@ class JamRuby::AffiliatePartner < ActiveRecord::Base tally_monthly_payments(quarter_info[:year], quarter_info[:quarter]) tally_quarterly_payments(quarter_info[:year], quarter_info[:quarter]) - tally_traffic_totals(GenericState.affiliate_tallied_at, day) + # we aren't tracking visits anymore, so we don't need to tally_traffic_totals + #tally_traffic_totals(GenericState.affiliate_tallied_at, day) tally_partner_totals @@ -437,6 +438,34 @@ class JamRuby::AffiliatePartner < ActiveRecord::Base close_months(year, quarter) end + # This was added because the tally_traffic_totals runs once a day, which is not often enough to get a fresh count of signups + # so as users sign up, we increment the signups count for the day + # jam=# \d affiliate_traffic_totals + # Table "public.affiliate_traffic_totals" + # Column | Type | Modifiers + #----------------------+-----------------------------+------------------------ + # day | date | not null + # signups | integer | not null default 0 + # visits | integer | not null default 0 + # affiliate_partner_id | integer | not null + # created_at | timestamp without time zone | not null default now() + + def self.increment_signups(user) + sql = "SELECT count(day) FROM affiliate_traffic_totals WHERE day = '#{user.created_at.to_date}' AND affiliate_partner_id = #{user.affiliate_referral_id}" + count = ActiveRecord::Base.connection.execute(sql) + if count > 0 + sql = %{ + UPDATE affiliate_traffic_totals SET signups = signups + 1 WHERE day = '#{user.created_at.to_date}' AND affiliate_partner_id = #{user.affiliate_referral_id} + } + else + sql = %{ + INSERT INTO affiliate_traffic_totals (day, signups, visits, affiliate_partner_id) VALUES ('#{user.created_at.to_date}', 1, 0, #{user.affiliate_referral_id}) + } + end + ActiveRecord::Base.connection.execute(sql) + + end + def self.tally_partner_totals sql = %{ UPDATE affiliate_partners SET @@ -460,6 +489,8 @@ class JamRuby::AffiliatePartner < ActiveRecord::Base return end + # Because we now increment_signups, as users sign up, it's possible this row already exists. however, if there were no signups and only visits, there may still not be a row here. + # So we need to insert the rows, and if they already exist, the INSERT will be a no-op, as long as we also update this statement to not fail if the row already exists. sql = %{ INSERT INTO affiliate_traffic_totals(SELECT day, 0, 0, ap.id FROM affiliate_partners AS ap CROSS JOIN (select (generate_series('#{start_date}', '#{end_date - 1}', '1 day'::interval))::date as day) AS lurp) } diff --git a/ruby/lib/jam_ruby/models/user.rb b/ruby/lib/jam_ruby/models/user.rb index 491cfedec..eab4d54a3 100644 --- a/ruby/lib/jam_ruby/models/user.rb +++ b/ruby/lib/jam_ruby/models/user.rb @@ -1865,6 +1865,9 @@ module JamRuby if user.affiliate_referral = AffiliatePartner.find_by_id(affiliate_referral_id) user.save + if !user.errors.any? + AffiliatePartner.increment_signups(user) + end end if affiliate_referral_id.present?