support share submission
This commit is contained in:
@@ -13,6 +13,25 @@ class ProblemTagAPI(APIView):
|
||||
|
||||
|
||||
class ProblemAPI(APIView):
|
||||
@staticmethod
|
||||
def _add_problem_status(request, queryset_values):
|
||||
if request.user.is_authenticated():
|
||||
profile = request.user.userprofile
|
||||
acm_problems_status = profile.acm_problems_status.get("problems", {})
|
||||
oi_problems_status = profile.oi_problems_status.get("problems", {})
|
||||
# paginate data
|
||||
results = queryset_values.get("results")
|
||||
if results:
|
||||
problems = results
|
||||
else:
|
||||
problems = [queryset_values,]
|
||||
|
||||
for problem in problems:
|
||||
if problem["rule_type"] == ProblemRuleType.ACM:
|
||||
problem["my_status"] = acm_problems_status.get(str(problem["id"]), {}).get("status")
|
||||
else:
|
||||
problem["my_status"] = oi_problems_status.get(str(problem["id"]), {}).get("status")
|
||||
|
||||
def get(self, request):
|
||||
# 问题详情页
|
||||
problem_id = request.GET.get("problem_id")
|
||||
@@ -20,7 +39,9 @@ class ProblemAPI(APIView):
|
||||
try:
|
||||
problem = Problem.objects.select_related("created_by")\
|
||||
.get(_id=problem_id, contest_id__isnull=True, visible=True)
|
||||
return self.success(ProblemSerializer(problem).data)
|
||||
problem_data = ProblemSerializer(problem).data
|
||||
self._add_problem_status(request, problem_data)
|
||||
return self.success(problem_data)
|
||||
except Problem.DoesNotExist:
|
||||
return self.error("Problem does not exist")
|
||||
|
||||
@@ -49,19 +70,21 @@ class ProblemAPI(APIView):
|
||||
problems = problems.filter(difficulty=difficulty)
|
||||
# 根据profile 为做过的题目添加标记
|
||||
data = self.paginate_data(request, problems, ProblemSerializer)
|
||||
if request.user.id:
|
||||
profile = request.user.userprofile
|
||||
acm_problems_status = profile.acm_problems_status.get("problems", {})
|
||||
oi_problems_status = profile.oi_problems_status.get("problems", {})
|
||||
for problem in data["results"]:
|
||||
if problem["rule_type"] == ProblemRuleType.ACM:
|
||||
problem["my_status"] = acm_problems_status.get(str(problem["id"]), {}).get("status")
|
||||
else:
|
||||
problem["my_status"] = oi_problems_status.get(str(problem["id"]), {}).get("status")
|
||||
self._add_problem_status(request, data)
|
||||
return self.success(data)
|
||||
|
||||
|
||||
class ContestProblemAPI(APIView):
|
||||
def _add_problem_status(self, request, queryset_values):
|
||||
if request.user.is_authenticated() and self.contest.rule_type != ContestRuleType.OI:
|
||||
profile = request.user.userprofile
|
||||
if self.contest.rule_type == ContestRuleType.ACM:
|
||||
problems_status = profile.acm_problems_status.get("contest_problems", {})
|
||||
else:
|
||||
problems_status = profile.oi_problems_status.get("contest_problems", {})
|
||||
for problem in queryset_values:
|
||||
problem["my_status"] = problems_status.get(str(problem["id"]), {}).get("status")
|
||||
|
||||
@check_contest_permission
|
||||
def get(self, request):
|
||||
problem_id = request.GET.get("problem_id")
|
||||
@@ -72,17 +95,12 @@ class ContestProblemAPI(APIView):
|
||||
visible=True)
|
||||
except Problem.DoesNotExist:
|
||||
return self.error("Problem does not exist.")
|
||||
return self.success(ContestProblemSerializer(problem).data)
|
||||
problem_data = ContestProblemSerializer(problem).data
|
||||
self._add_problem_status(request, problem_data)
|
||||
return self.success(problem_data)
|
||||
|
||||
contest_problems = Problem.objects.select_related("created_by").filter(contest=self.contest, visible=True)
|
||||
# 根据profile, 为做过的题目添加标记
|
||||
data = ContestProblemSerializer(contest_problems, many=True).data
|
||||
if request.user.is_authenticated() and self.contest.rule_type != ContestRuleType.OI:
|
||||
profile = request.user.userprofile
|
||||
if self.contest.rule_type == ContestRuleType.ACM:
|
||||
problems_status = profile.acm_problems_status.get("contest_problems", {})
|
||||
else:
|
||||
problems_status = profile.oi_problems_status.get("contest_problems", {})
|
||||
for problem in data:
|
||||
problem["my_status"] = problems_status.get(str(problem["id"]), None)
|
||||
self._add_problem_status(request, data)
|
||||
return self.success(data)
|
||||
|
||||
Reference in New Issue
Block a user