This commit is contained in:
2025-10-22 20:29:12 +08:00
parent 07aaff69f2
commit c87022793e
7 changed files with 128 additions and 32 deletions

View File

@@ -16,8 +16,10 @@ from problemset.serializers import (
EditProblemSetSerializer,
ProblemSetProblemSerializer,
AddProblemToSetSerializer,
EditProblemInSetSerializer,
ProblemSetBadgeSerializer,
CreateProblemSetBadgeSerializer,
EditProblemSetBadgeSerializer,
ProblemSetProgressSerializer,
)
from problem.models import Problem
@@ -152,7 +154,7 @@ class ProblemSetProblemAdminAPI(APIView):
data = request.data
try:
problem = Problem.objects.get(id=data["problem_id"])
problem = Problem.objects.get(_id=data["problem_id"])
except Problem.DoesNotExist:
return self.error("题目不存在")
@@ -174,7 +176,38 @@ class ProblemSetProblemAdminAPI(APIView):
return self.success("题目已添加到题单")
@super_admin_required
def delete(self, request, problem_set_id, problem_id):
@validate_serializer(EditProblemInSetSerializer)
def put(self, request, problem_set_id, problem_set_problem_id):
"""编辑题单中的题目(管理员)"""
try:
problem_set = ProblemSet.objects.get(id=problem_set_id)
ensure_created_by(problem_set, request.user)
except ProblemSet.DoesNotExist:
return self.error("题单不存在")
try:
problem_set_problem = ProblemSetProblem.objects.get(
id=problem_set_problem_id, problemset=problem_set
)
except ProblemSetProblem.DoesNotExist:
return self.error("题目不在该题单中")
data = request.data
# 更新题目属性
if 'order' in data:
problem_set_problem.order = data['order']
if 'is_required' in data:
problem_set_problem.is_required = data['is_required']
if 'score' in data:
problem_set_problem.score = data['score']
if 'hint' in data:
problem_set_problem.hint = data['hint']
problem_set_problem.save()
return self.success("题目已更新")
@super_admin_required
def delete(self, request, problem_set_id, problem_set_problem_id):
"""从题单中移除题目(管理员)"""
try:
problem_set = ProblemSet.objects.get(id=problem_set_id)
@@ -184,7 +217,7 @@ class ProblemSetProblemAdminAPI(APIView):
try:
problem_set_problem = ProblemSetProblem.objects.get(
problemset=problem_set, problem_id=problem_id
id=problem_set_problem_id, problemset=problem_set
)
problem_set_problem.delete()
return self.success("题目已从题单中移除")
@@ -224,6 +257,39 @@ class ProblemSetBadgeAdminAPI(APIView):
return self.success(ProblemSetBadgeSerializer(badge).data)
@super_admin_required
@validate_serializer(EditProblemSetBadgeSerializer)
def put(self, request, problem_set_id, badge_id):
"""编辑题单奖章(管理员)"""
try:
problem_set = ProblemSet.objects.get(id=problem_set_id)
ensure_created_by(problem_set, request.user)
except ProblemSet.DoesNotExist:
return self.error("题单不存在")
try:
badge = ProblemSetBadge.objects.get(id=badge_id, problemset=problem_set)
except ProblemSetBadge.DoesNotExist:
return self.error("奖章不存在")
data = request.data
# 更新奖章属性
if 'name' in data:
badge.name = data['name']
if 'description' in data:
badge.description = data['description']
if 'icon' in data:
badge.icon = data['icon']
if 'condition_type' in data:
badge.condition_type = data['condition_type']
if 'condition_value' in data:
badge.condition_value = data['condition_value']
if 'level' in data:
badge.level = data['level']
badge.save()
return self.success("奖章已更新")
@super_admin_required
def delete(self, request, problem_set_id, badge_id):
"""删除题单奖章(管理员)"""