admin修改username后update submissions;

problem id refresh api
This commit is contained in:
zema1 2017-11-08 21:56:39 +08:00
parent 2d00ed802d
commit 343eff1c51
4 changed files with 28 additions and 3 deletions

View File

@ -4,7 +4,8 @@ from ..views.oj import (ApplyResetPasswordAPI, ResetPasswordAPI,
UserChangePasswordAPI, UserRegisterAPI, UserChangeEmailAPI, UserChangePasswordAPI, UserRegisterAPI, UserChangeEmailAPI,
UserLoginAPI, UserLogoutAPI, UsernameOrEmailCheck, UserLoginAPI, UserLogoutAPI, UsernameOrEmailCheck,
AvatarUploadAPI, TwoFactorAuthAPI, UserProfileAPI, AvatarUploadAPI, TwoFactorAuthAPI, UserProfileAPI,
UserRankAPI, CheckTFARequiredAPI, SessionManagementAPI) UserRankAPI, CheckTFARequiredAPI, SessionManagementAPI,
ProfileProblemDisplayIDRefreshAPI)
from utils.captcha.views import CaptchaAPIView from utils.captcha.views import CaptchaAPIView
@ -19,6 +20,7 @@ urlpatterns = [
url(r"^captcha/?$", CaptchaAPIView.as_view(), name="show_captcha"), url(r"^captcha/?$", CaptchaAPIView.as_view(), name="show_captcha"),
url(r"^check_username_or_email", UsernameOrEmailCheck.as_view(), name="check_username_or_email"), url(r"^check_username_or_email", UsernameOrEmailCheck.as_view(), name="check_username_or_email"),
url(r"^profile/?$", UserProfileAPI.as_view(), name="user_profile_api"), url(r"^profile/?$", UserProfileAPI.as_view(), name="user_profile_api"),
url(r"^profile/fresh_display_id", ProfileProblemDisplayIDRefreshAPI.as_view(), name="display_id_fresh"),
url(r"^upload_avatar/?$", AvatarUploadAPI.as_view(), name="avatar_upload_api"), url(r"^upload_avatar/?$", AvatarUploadAPI.as_view(), name="avatar_upload_api"),
url(r"^tfa_required/?$", CheckTFARequiredAPI.as_view(), name="tfa_required_check"), url(r"^tfa_required/?$", CheckTFARequiredAPI.as_view(), name="tfa_required_check"),
url(r"^two_factor_auth/?$", TwoFactorAuthAPI.as_view(), name="two_factor_auth_api"), url(r"^two_factor_auth/?$", TwoFactorAuthAPI.as_view(), name="two_factor_auth_api"),

View File

@ -1,5 +1,6 @@
from django.db.models import Q from django.db.models import Q
from submission.models import Submission
from utils.api import APIView, validate_serializer from utils.api import APIView, validate_serializer
from utils.shortcuts import rand_str from utils.shortcuts import rand_str
@ -25,6 +26,7 @@ class UserAdminAPI(APIView):
if User.objects.filter(email=data["email"].lower()).exclude(id=user.id).exists(): if User.objects.filter(email=data["email"].lower()).exclude(id=user.id).exists():
return self.error("Email already exists") return self.error("Email already exists")
pre_username = user.username
user.username = data["username"] user.username = data["username"]
user.email = data["email"] user.email = data["email"]
user.admin_type = data["admin_type"] user.admin_type = data["admin_type"]
@ -58,6 +60,8 @@ class UserAdminAPI(APIView):
user.two_factor_auth = data["two_factor_auth"] user.two_factor_auth = data["two_factor_auth"]
user.save() user.save()
if pre_username != user.username:
Submission.objects.filter(username=pre_username).update(username=user.username)
return self.success(UserSerializer(user).data) return self.success(UserSerializer(user).data)
@super_admin_required @super_admin_required

View File

@ -11,6 +11,7 @@ from django.utils.timezone import now
from django.views.decorators.csrf import ensure_csrf_cookie from django.views.decorators.csrf import ensure_csrf_cookie
from otpauth import OtpAuth from otpauth import OtpAuth
from problem.models import Problem
from utils.constants import ContestRuleType from utils.constants import ContestRuleType
from options.options import SysOptions from options.options import SysOptions
from utils.api import APIView, validate_serializer from utils.api import APIView, validate_serializer
@ -379,3 +380,21 @@ class UserRankAPI(APIView):
else: else:
profiles = profiles.filter(total_score__gt=0).order_by("-total_score") profiles = profiles.filter(total_score__gt=0).order_by("-total_score")
return self.success(self.paginate_data(request, profiles, RankInfoSerializer)) return self.success(self.paginate_data(request, profiles, RankInfoSerializer))
class ProfileProblemDisplayIDRefreshAPI(APIView):
@login_required
def get(self, request):
profile = request.user.userprofile
acm_problems = profile.acm_problems_status["problems"]
oi_problems = profile.oi_problems_status["problems"]
ids = list(acm_problems.keys()) + list(oi_problems.keys())
display_ids = Problem.objects.filter(id__in=ids).values_list("_id", flat=True)
id_map = dict(zip(ids, display_ids))
print(id_map)
for k, v in acm_problems.items():
v["_id"] = id_map[k]
for k, v in oi_problems.items():
v["_id"] = id_map[k]
profile.save(update_fields=["acm_problems_status", "oi_problems_status"])
return self.success()

View File

@ -16,7 +16,7 @@ class ContestAnnouncementListAPI(APIView):
def get(self, request): def get(self, request):
contest_id = request.GET.get("contest_id") contest_id = request.GET.get("contest_id")
if not contest_id: if not contest_id:
return self.error("Invalid parameter") return self.error("Invalid parameter, contest_id is required")
data = ContestAnnouncement.objects.select_related("created_by").filter(contest_id=contest_id, visible=True) data = ContestAnnouncement.objects.select_related("created_by").filter(contest_id=contest_id, visible=True)
max_id = request.GET.get("max_id") max_id = request.GET.get("max_id")
if max_id: if max_id:
@ -28,7 +28,7 @@ class ContestAPI(APIView):
def get(self, request): def get(self, request):
id = request.GET.get("id") id = request.GET.get("id")
if not id: if not id:
return self.error("Invalid parameter") return self.error("Invalid parameter, id is required")
try: try:
contest = Contest.objects.get(id=id) contest = Contest.objects.get(id=id)
return self.success(ContestSerializer(contest).data) return self.success(ContestSerializer(contest).data)