change enum

This commit is contained in:
2026-05-09 02:30:47 -06:00
parent 78158471b2
commit c466dfd3c6
23 changed files with 451 additions and 503 deletions

View File

@@ -7,6 +7,7 @@ from problemset.models import (
ProblemSetBadge,
ProblemSetProblem,
ProblemSetProgress,
ProblemSetStatus,
)
from problemset.serializers import (
AddProblemToSetSerializer,
@@ -35,9 +36,7 @@ class ProblemSetAdminAPI(APIView):
# 过滤条件
keyword = request.GET.get("keyword", "").strip()
if keyword:
problem_sets = problem_sets.filter(
Q(title__icontains=keyword) | Q(description__icontains=keyword)
)
problem_sets = problem_sets.filter(Q(title__icontains=keyword) | Q(description__icontains=keyword))
difficulty = request.GET.get("difficulty")
if difficulty:
@@ -129,12 +128,8 @@ class ProblemSetProblemAdminAPI(APIView):
except ProblemSet.DoesNotExist:
return self.error("题单不存在")
problems = ProblemSetProblem.objects.filter(problemset=problem_set).order_by(
"order"
)
serializer = ProblemSetProblemSerializer(
problems, many=True, context={"request": request}
)
problems = ProblemSetProblem.objects.filter(problemset=problem_set).order_by("order")
serializer = ProblemSetProblemSerializer(problems, many=True, context={"request": request})
return self.success(serializer.data)
@super_admin_required
@@ -158,9 +153,7 @@ class ProblemSetProblemAdminAPI(APIView):
return self.error("题目不存在或不可见")
# 检查题目是否已经在题单中
if ProblemSetProblem.objects.filter(
problemset=problem_set, problem=problem
).exists():
if ProblemSetProblem.objects.filter(problemset=problem_set, problem=problem).exists():
return self.error("题目已在该题单中")
ProblemSetProblem.objects.create(
@@ -188,9 +181,7 @@ class ProblemSetProblemAdminAPI(APIView):
return self.error("题单不存在")
try:
problem_set_problem = ProblemSetProblem.objects.get(
id=problem_set_problem_id, problemset=problem_set
)
problem_set_problem = ProblemSetProblem.objects.get(id=problem_set_problem_id, problemset=problem_set)
except ProblemSetProblem.DoesNotExist:
return self.error("题目不在该题单中")
@@ -206,10 +197,10 @@ class ProblemSetProblemAdminAPI(APIView):
problem_set_problem.hint = data["hint"]
problem_set_problem.save()
# 同步所有用户的进度
ProblemSetProgress.sync_all_progress_for_problemset(problem_set)
return self.success("题目已更新")
@super_admin_required
@@ -222,14 +213,12 @@ class ProblemSetProblemAdminAPI(APIView):
return self.error("题单不存在")
try:
problem_set_problem = ProblemSetProblem.objects.get(
id=problem_set_problem_id, problemset=problem_set
)
problem_set_problem = ProblemSetProblem.objects.get(id=problem_set_problem_id, problemset=problem_set)
problem_set_problem.delete()
# 同步所有用户的进度
ProblemSetProgress.sync_all_progress_for_problemset(problem_set)
return self.success("题目已从题单中移除")
except ProblemSetProblem.DoesNotExist:
return self.error("题目不在该题单中")
@@ -283,10 +272,10 @@ class ProblemSetBadgeAdminAPI(APIView):
return self.error("奖章不存在")
data = request.data
# 记录是否修改了条件相关的字段
condition_changed = False
# 更新奖章属性
if "name" in data:
badge.name = data["name"]
@@ -304,7 +293,7 @@ class ProblemSetBadgeAdminAPI(APIView):
badge.level = data["level"]
badge.save()
# 如果修改了条件,重新计算所有用户的徽章资格
if condition_changed:
try:
@@ -312,7 +301,7 @@ class ProblemSetBadgeAdminAPI(APIView):
return self.success("奖章已更新,并重新计算了所有用户的徽章资格")
except Exception as e:
return self.error(f"奖章已更新,但重新计算徽章资格时出错: {str(e)}")
return self.success("奖章已更新")
@super_admin_required
@@ -344,9 +333,7 @@ class ProblemSetProgressAdminAPI(APIView):
except ProblemSet.DoesNotExist:
return self.error("题单不存在")
progress_list = ProblemSetProgress.objects.filter(
problemset=problem_set
).order_by("-join_time")
progress_list = ProblemSetProgress.objects.filter(problemset=problem_set).order_by("-join_time")
serializer = ProblemSetProgressSerializer(progress_list, many=True)
return self.success(serializer.data)
@@ -360,9 +347,7 @@ class ProblemSetProgressAdminAPI(APIView):
return self.error("题单不存在")
try:
progress = ProblemSetProgress.objects.get(
problemset=problem_set, user_id=user_id
)
progress = ProblemSetProgress.objects.get(problemset=problem_set, user_id=user_id)
progress.delete()
return self.success("用户已从题单中移除")
except ProblemSetProgress.DoesNotExist:
@@ -371,7 +356,7 @@ class ProblemSetProgressAdminAPI(APIView):
class ProblemSetSyncAPI(APIView):
"""题单同步管理API"""
@super_admin_required
def post(self, request, problem_set_id):
"""手动同步题单的所有用户进度(管理员)"""
@@ -380,10 +365,10 @@ class ProblemSetSyncAPI(APIView):
ensure_created_by(problem_set, request.user)
except ProblemSet.DoesNotExist:
return self.error("题单不存在")
# 同步所有用户的进度
synced_count = ProblemSetProgress.sync_all_progress_for_problemset(problem_set)
return self.success(f"已同步 {synced_count} 个用户的进度")
@@ -419,7 +404,7 @@ class ProblemSetStatusAPI(APIView):
return self.error("题单不存在")
status = data.get("status")
if status not in ["active", "archived", "draft"]:
if status not in ProblemSetStatus.values:
return self.error("无效的状态")
problem_set.status = status