@@ -62,6 +62,27 @@ def get(self, request, *args, **kwargs):
6262 messages .error (request , "You do not have permission to perform this action." )
6363 return redirect ('github_management:country_list' )
6464
65+
66+ class RecomputeAllCountriesRankingView (View ):
67+ """View to trigger recomputing intelligence-based ranking for all countries (superuser only)."""
68+ def get (self , request , * args , ** kwargs ):
69+ if not request .user .is_superuser :
70+ messages .error (request , "You do not have permission to perform this action." )
71+ return redirect ('github_management:country_list' )
72+
73+ try :
74+ from .tasks import recompute_all_countries_intelligence_ranking
75+ task = recompute_all_countries_intelligence_ranking .delay ()
76+ messages .success (
77+ request ,
78+ f"Started recomputing intelligence ranking for all countries. Task ID: { task .id } "
79+ )
80+ except Exception as e :
81+ logger .error (f"Error enqueuing global ranking recomputation: { e } " )
82+ messages .error (request , f"Failed to start global ranking recomputation: { str (e )} " )
83+
84+ return redirect ('github_management:country_list' )
85+
6586class UpdateCountryUsersStatsView (LoginRequiredMixin , UserPassesTestMixin , View ):
6687 """Trigger batch update of all GitHub users' stats for a given country (superuser only)."""
6788 def test_func (self ):
@@ -82,6 +103,35 @@ def post(self, request, slug):
82103 messages .info (request , f"No users found for { country .name } to update." )
83104 return redirect ('github_management:country_detail' , slug = slug )
84105
106+
107+ class RecomputeCountryRankingView (LoginRequiredMixin , UserPassesTestMixin , View ):
108+ """Trigger recomputation of intelligence-based ranking for a given country (superuser only)."""
109+ def test_func (self ):
110+ return self .request .user .is_superuser
111+
112+ def post (self , request , slug ):
113+ country = get_object_or_404 (Country , slug = slug )
114+ try :
115+ from .tasks import recompute_country_intelligence_ranking
116+ task = recompute_country_intelligence_ranking .delay (country .id )
117+ if request .headers .get ('x-requested-with' ) == 'XMLHttpRequest' :
118+ return JsonResponse ({
119+ 'success' : True ,
120+ 'message' : f"Started recomputing intelligence ranking for users in { country .name } ." ,
121+ 'task_id' : str (task .id ),
122+ })
123+ messages .success (request , f"Started recomputing intelligence ranking for users in { country .name } . Task ID: { task .id } " )
124+ except Exception as e :
125+ logger .error (f"Error enqueuing ranking recomputation for { country .name } : { e } " )
126+ if request .headers .get ('x-requested-with' ) == 'XMLHttpRequest' :
127+ return JsonResponse ({
128+ 'success' : False ,
129+ 'message' : f"Failed to start ranking recomputation: { str (e )} " ,
130+ }, status = 400 )
131+ messages .error (request , f"Failed to start ranking recomputation: { str (e )} " )
132+
133+ return redirect ('github_management:country_detail' , slug = slug )
134+
85135 try :
86136 from .tasks import update_users_stats_batch
87137 task = update_users_stats_batch .delay (user_ids , "GitHubUser" )
@@ -110,7 +160,7 @@ def get(self, request, slug):
110160 country = get_object_or_404 (Country , slug = slug )
111161
112162 # Get users for this country
113- users = GitHubUser .objects .filter (country = country ).order_by ('-contributions_last_year' )
163+ users = GitHubUser .objects .filter (country = country ).order_by ('rank' , '-intelligence_score' , ' -contributions_last_year' )
114164
115165 # Pagination
116166 paginator = Paginator (users , 25 ) # Show 25 users per page
0 commit comments