From 749612002a2b4abf74750f82642cee30ac6fb039 Mon Sep 17 00:00:00 2001 From: yuetsh <51725939@qq.com> Date: Wed, 14 Aug 2024 00:24:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=B4=BB=E8=B7=83=E5=BA=A6?= =?UTF-8?q?=E6=8E=92=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- account/urls/oj.py | 3 ++- account/views/oj.py | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/account/urls/oj.py b/account/urls/oj.py index dbdbc12..35c2155 100644 --- a/account/urls/oj.py +++ b/account/urls/oj.py @@ -4,7 +4,7 @@ from ..views.oj import (ApplyResetPasswordAPI, ResetPasswordAPI, UserChangePasswordAPI, UserRegisterAPI, UserChangeEmailAPI, UserLoginAPI, UserLogoutAPI, UsernameOrEmailCheck, AvatarUploadAPI, TwoFactorAuthAPI, UserProfileAPI, - UserRankAPI, CheckTFARequiredAPI, SessionManagementAPI, + UserRankAPI, UserActivityRankAPI, CheckTFARequiredAPI, SessionManagementAPI, ProfileProblemDisplayIDRefreshAPI, OpenAPIAppkeyAPI, SSOAPI) from utils.captcha.views import CaptchaAPIView @@ -25,6 +25,7 @@ urlpatterns = [ path("tfa_required", CheckTFARequiredAPI.as_view()), path("two_factor_auth", TwoFactorAuthAPI.as_view(),), path("user_rank", UserRankAPI.as_view()), + path("user_activity_rank", UserActivityRankAPI.as_view()), path("sessions", SessionManagementAPI.as_view()), path("open_api_appkey", OpenAPIAppkeyAPI.as_view(),), path("sso", SSOAPI.as_view()) diff --git a/account/views/oj.py b/account/views/oj.py index aff7d62..401c893 100644 --- a/account/views/oj.py +++ b/account/views/oj.py @@ -9,9 +9,11 @@ from django.template.loader import render_to_string from django.utils.decorators import method_decorator from django.utils.timezone import now from django.views.decorators.csrf import ensure_csrf_cookie, csrf_exempt +from django.db.models import Count from otpauth import OtpAuth from problem.models import Problem +from submission.models import Submission from utils.constants import ContestRuleType from options.options import SysOptions from utils.api import APIView, validate_serializer, CSRFExemptAPIView @@ -394,6 +396,16 @@ class UserRankAPI(APIView): return self.success(self.paginate_data(request, profiles, RankInfoSerializer)) +class UserActivityRankAPI(APIView): + def get(self, request): + start = request.GET.get("start") + if not start: + return self.error("start time is required") + submissions = Submission.objects.filter(contest_id__isnull=True, create_time__gte=start) + counts = submissions.values("username").annotate(count=Count("id")).order_by("-count") + return self.success(list(counts)[:10]) + + class ProfileProblemDisplayIDRefreshAPI(APIView): @login_required def get(self, request):