@@ -4,24 +4,25 @@ class DashboardController < ApplicationController
44
55 def show
66 @user = current_user
7- @scans = current_user . scans . includes ( :user ) . recent . limit ( 20 )
8- @scan_stats = calculate_scan_stats
9- @next_prize = calculate_next_prize ( @scan_stats [ :total_tickets ] )
7+ @visits = current_user . visits . includes ( :user ) . recent . limit ( 20 )
8+ @visit_stats = calculate_visit_stats
9+ @next_prize = calculate_next_prize ( @visit_stats [ :total_tickets ] )
1010 end
1111
12- def scan_data
13- scans = current_user . scans . geocoded . recent . limit ( 100 )
12+ def visit_data
13+ visits = current_user . visits . geocoded . recent . limit ( 100 )
1414
15- data = scans . map do |scan |
15+ data = visits . map do |visit |
1616 {
17- id : scan . id ,
17+ id : visit . id ,
1818 username : current_user . username ,
19- latitude : scan . latitude ,
20- longitude : scan . longitude ,
21- location : scan . location_display ,
22- device : scan . device_info ,
23- created_at : scan . created_at . iso8601 ,
24- time_ago : time_ago_in_words ( scan . created_at )
19+ latitude : visit . latitude ,
20+ longitude : visit . longitude ,
21+ location : visit . location_display ,
22+ device : visit . device_info ,
23+ source : visit . source ,
24+ created_at : visit . created_at . iso8601 ,
25+ time_ago : time_ago_in_words ( visit . created_at )
2526 }
2627 end
2728
@@ -32,8 +33,9 @@ def poster
3233 require 'hexapdf'
3334 require 'rqrcode'
3435
35- # Generate QR code
36- qr_code = RQRCode ::QRCode . new ( current_user . referral_url )
36+ # Generate QR code with qr=1 parameter for source detection
37+ qr_url = "#{ current_user . referral_url } ?qr=1"
38+ qr_code = RQRCode ::QRCode . new ( qr_url )
3739 qr_png = qr_code . as_png ( size : 400 , border_modules : 2 )
3840
3941 # Create PDF document
@@ -144,30 +146,34 @@ def poster
144146
145147 private
146148
147- def calculate_scan_stats
148- scans = current_user . scans
149- scans_this_week = scans . where ( 'created_at > ?' , 1 . week . ago )
149+ def calculate_visit_stats
150+ visits = current_user . visits
151+ visits_this_week = visits . where ( 'created_at > ?' , 1 . week . ago )
150152
151- # Calculate tickets based on current activity
152- # For now, we'll simulate ticket earning:
153- # - 3 tickets per unique visitor (simulating signup + 1 hour coding)
154- # - 1 ticket per poster download (we'll estimate based on total scans / 10)
153+ # Calculate tickets based on source and activity
154+ # QR code scans: 3 tickets each (higher engagement)
155+ # Link clicks: 1 ticket each (easier sharing)
155156
156- total_tickets = ( scans . select ( :ip_address , :user_agent ) . distinct . count * 3 ) +
157- ( scans . count / 10 ) # Estimate poster downloads
157+ qr_visits = visits . qr_code . select ( :ip_address , :user_agent ) . distinct
158+ link_visits = visits . link . select ( :ip_address , :user_agent ) . distinct
158159
159- tickets_this_week = ( scans_this_week . select ( :ip_address , :user_agent ) . distinct . count * 3 ) +
160- ( scans_this_week . count / 10 )
160+ qr_visits_week = visits_this_week . qr_code . select ( :ip_address , :user_agent ) . distinct
161+ link_visits_week = visits_this_week . link . select ( :ip_address , :user_agent ) . distinct
162+
163+ total_tickets = ( qr_visits . count * 3 ) + ( link_visits . count * 1 )
164+ tickets_this_week = ( qr_visits_week . count * 3 ) + ( link_visits_week . count * 1 )
161165
162166 {
163- total_scans : scans . count ,
167+ total_visits : visits . count ,
164168 total_tickets : total_tickets ,
165- unique_visitors : scans . select ( :ip_address , :user_agent ) . distinct . count ,
166- scans_today : scans . where ( 'created_at > ?' , 1 . day . ago ) . count ,
167- scans_this_week : scans_this_week . count ,
169+ unique_visitors : visits . select ( :ip_address , :user_agent ) . distinct . count ,
170+ qr_visits : qr_visits . count ,
171+ link_visits : link_visits . count ,
172+ visits_today : visits . where ( 'created_at > ?' , 1 . day . ago ) . count ,
173+ visits_this_week : visits_this_week . count ,
168174 tickets_this_week : tickets_this_week ,
169- unique_visitors_this_week : scans_this_week . select ( :ip_address , :user_agent ) . distinct . count ,
170- top_countries : scans . geocoded
175+ unique_visitors_this_week : visits_this_week . select ( :ip_address , :user_agent ) . distinct . count ,
176+ top_countries : visits . geocoded
171177 . where . not ( country_name : [ nil , '' ] )
172178 . group ( :country_name )
173179 . count
0 commit comments