mirror of
https://github.com/QingdaoU/OnlineJudge.git
synced 2025-11-04 14:49:58 +08:00
update edit problem api
This commit is contained in:
parent
42713341b3
commit
f0540d5a00
@ -33,19 +33,19 @@ class CreateOrEditProblemSerializer(serializers.Serializer):
|
|||||||
description = serializers.CharField()
|
description = serializers.CharField()
|
||||||
input_description = serializers.CharField()
|
input_description = serializers.CharField()
|
||||||
output_description = serializers.CharField()
|
output_description = serializers.CharField()
|
||||||
samples = serializers.ListField(child=CreateSampleSerializer())
|
samples = serializers.ListField(child=CreateSampleSerializer(), allow_empty=False)
|
||||||
test_case_id = serializers.CharField(max_length=32)
|
test_case_id = serializers.CharField(max_length=32)
|
||||||
test_case_score = serializers.ListField(child=CreateTestCaseScoreSerializer())
|
test_case_score = serializers.ListField(child=CreateTestCaseScoreSerializer(), allow_empty=False)
|
||||||
time_limit = serializers.IntegerField(min_value=1, max_value=1000 * 60)
|
time_limit = serializers.IntegerField(min_value=1, max_value=1000 * 60)
|
||||||
memory_limit = serializers.IntegerField(min_value=1, max_value=1024)
|
memory_limit = serializers.IntegerField(min_value=1, max_value=1024)
|
||||||
languages = serializers.ListField(child=serializers.ChoiceField(choices=language_names))
|
languages = serializers.ListField(child=serializers.ChoiceField(choices=language_names), allow_empty=False)
|
||||||
rule_type = serializers.ChoiceField(choices=[ProblemRuleType.ACM, ProblemRuleType.OI])
|
rule_type = serializers.ChoiceField(choices=[ProblemRuleType.ACM, ProblemRuleType.OI])
|
||||||
spj = serializers.BooleanField()
|
spj = serializers.BooleanField()
|
||||||
spj_language = serializers.ChoiceField(choices=spj_language_names, allow_blank=True, allow_null=True)
|
spj_language = serializers.ChoiceField(choices=spj_language_names, allow_blank=True, allow_null=True)
|
||||||
spj_code = serializers.CharField(allow_blank=True, allow_null=True)
|
spj_code = serializers.CharField(allow_blank=True, allow_null=True)
|
||||||
visible = serializers.BooleanField()
|
visible = serializers.BooleanField()
|
||||||
difficulty = serializers.ChoiceField(choices=[Difficulty.LOW, Difficulty.MID, Difficulty.HIGH])
|
difficulty = serializers.ChoiceField(choices=[Difficulty.LOW, Difficulty.MID, Difficulty.HIGH])
|
||||||
tags = serializers.ListField(child=serializers.CharField(max_length=32))
|
tags = serializers.ListField(child=serializers.CharField(max_length=32), allow_empty=False)
|
||||||
hint = serializers.CharField(allow_blank=True, allow_null=True)
|
hint = serializers.CharField(allow_blank=True, allow_null=True)
|
||||||
source = serializers.CharField(max_length=256, allow_blank=True, allow_null=True)
|
source = serializers.CharField(max_length=256, allow_blank=True, allow_null=True)
|
||||||
|
|
||||||
|
|||||||
@ -111,10 +111,6 @@ class ProblemAPI(APIView):
|
|||||||
@validate_serializer(CreateProblemSerializer)
|
@validate_serializer(CreateProblemSerializer)
|
||||||
def post(self, request):
|
def post(self, request):
|
||||||
data = request.data
|
data = request.data
|
||||||
if not data["languages"]:
|
|
||||||
return self.error("Invalid languages")
|
|
||||||
if not data["samples"]:
|
|
||||||
return self.error("Invalid samples")
|
|
||||||
if data["spj"]:
|
if data["spj"]:
|
||||||
if not data["spj_language"] or not data["spj_code"]:
|
if not data["spj_language"] or not data["spj_code"]:
|
||||||
return self.error("Invalid spj")
|
return self.error("Invalid spj")
|
||||||
@ -123,18 +119,13 @@ class ProblemAPI(APIView):
|
|||||||
data["spj_language"] = None
|
data["spj_language"] = None
|
||||||
data["spj_code"] = None
|
data["spj_code"] = None
|
||||||
if data["rule_type"] == ProblemRuleType.OI:
|
if data["rule_type"] == ProblemRuleType.OI:
|
||||||
if not data["test_case_score"]:
|
|
||||||
return self.error("Test case score is required")
|
|
||||||
for item in data["test_case_score"]:
|
for item in data["test_case_score"]:
|
||||||
if item["score"] <= 0:
|
if item["score"] <= 0:
|
||||||
return self.error("Invalid score")
|
return self.error("Invalid score")
|
||||||
# todo check filename
|
# todo check filename and score info
|
||||||
else:
|
|
||||||
data["test_case_score"] = []
|
|
||||||
data["created_by"] = request.user
|
data["created_by"] = request.user
|
||||||
tags = data.pop("tags")
|
tags = data.pop("tags")
|
||||||
if not tags:
|
|
||||||
return self.error("Tags is required")
|
|
||||||
problem = Problem.objects.create(**data)
|
problem = Problem.objects.create(**data)
|
||||||
for item in tags:
|
for item in tags:
|
||||||
try:
|
try:
|
||||||
@ -162,4 +153,37 @@ class ProblemAPI(APIView):
|
|||||||
|
|
||||||
@validate_serializer(EditProblemSerializer)
|
@validate_serializer(EditProblemSerializer)
|
||||||
def put(self, request):
|
def put(self, request):
|
||||||
|
data = request.data
|
||||||
|
try:
|
||||||
|
problem = Problem.objects.get(id=data.pop("id"))
|
||||||
|
if request.user.is_admin_role():
|
||||||
|
problem = problem.get(created_by=request.user)
|
||||||
|
except Problem.DoesNotExist:
|
||||||
|
return self.error("Problem does not exist")
|
||||||
|
if data["spj"]:
|
||||||
|
if not data["spj_language"] or not data["spj_code"]:
|
||||||
|
return self.error("Invalid spj")
|
||||||
|
data["spj_version"] = hashlib.md5((data["spj_language"] + ":" + data["spj_code"]).encode("utf-8")).hexdigest()
|
||||||
|
else:
|
||||||
|
data["spj_language"] = None
|
||||||
|
data["spj_code"] = None
|
||||||
|
if data["rule_type"] == ProblemRuleType.OI:
|
||||||
|
for item in data["test_case_score"]:
|
||||||
|
if item["score"] <= 0:
|
||||||
|
return self.error("Invalid score")
|
||||||
|
# todo check filename and score info
|
||||||
|
tags = data.pop("tags")
|
||||||
|
|
||||||
|
for k, v in data.items():
|
||||||
|
setattr(problem, k, v)
|
||||||
|
problem.save()
|
||||||
|
|
||||||
|
problem.tags.remove(*problem.tags.all())
|
||||||
|
for tag in tags:
|
||||||
|
try:
|
||||||
|
tag = ProblemTag.objects.get(name=tag)
|
||||||
|
except ProblemTag.DoesNotExist:
|
||||||
|
tag = ProblemTag.objects.create(name=tag)
|
||||||
|
problem.tags.add(tag)
|
||||||
|
|
||||||
return self.success()
|
return self.success()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user