diff --git a/api/controllers/problem/get_all_problems_by_account.py b/api/controllers/problem/get_all_problems_by_account.py index a9d373b..06ecce6 100644 --- a/api/controllers/problem/get_all_problems_by_account.py +++ b/api/controllers/problem/get_all_problems_by_account.py @@ -12,16 +12,21 @@ def get_all_problems_by_account(account:Account,request): start = int(request.query_params.get("start",0)) end = int(request.query_params.get("end",-1)) + query = request.query_params.get("query","") if end == -1: end = None - personalProblems = Problem.objects.filter(creator=account).order_by('-updated_date') + personalProblems = Problem.objects.filter(creator=account, title__icontains=query).order_by('-updated_date') maxPersonal = len(personalProblems) if start < maxPersonal and start < maxPersonal: personalProblems = personalProblems[start:end] for problem in personalProblems: problem.testcases = Testcase.objects.filter(problem=problem,deprecated=False) - manageableProblems = Problem.objects.filter(problemgrouppermission__permission_manage_problems=True,problemgrouppermission__group__in=GroupMember.objects.filter(account=account).values_list("group",flat=True)).order_by('-updated_date') + manageableProblems = Problem.objects.filter( + problemgrouppermission__permission_manage_problems=True, + problemgrouppermission__group__in=GroupMember.objects.filter(account=account).values_list("group",flat=True), + title__icontains=query + ).order_by('-updated_date') maxManageable = len(manageableProblems) if start < maxManageable and start < maxManageable: manageableProblems = manageableProblems[start:end] @@ -29,8 +34,8 @@ def get_all_problems_by_account(account:Account,request): problem.testcases = Testcase.objects.filter(problem=problem,deprecated=False) # problem_ser = ProblemPopulateTestcaseSerializer(problems,many=True) - personalSerialize = ProblemPopulateTestcaseSerializer(personalProblems,many=True) - manageableSerialize = ProblemPopulateTestcaseSerializer(manageableProblems,many=True) + personalSerialize = ProblemPopulatePartialTestcaseSerializer(personalProblems,many=True) + manageableSerialize = ProblemPopulatePartialTestcaseSerializer(manageableProblems,many=True) return Response({ "start":start, diff --git a/api/controllers/submission/get_all_submissions_by_creator_problem.py b/api/controllers/submission/get_all_submissions_by_creator_problem.py index c4a4dde..1f46dee 100644 --- a/api/controllers/submission/get_all_submissions_by_creator_problem.py +++ b/api/controllers/submission/get_all_submissions_by_creator_problem.py @@ -8,13 +8,22 @@ from django.forms.models import model_to_dict from ...serializers import * -def get_all_submissions_by_creator_problem(problem:Problem): +def get_all_submissions_by_creator_problem(problem:Problem, request): + + start = int(request.query_params.get("start",0)) + end = int(request.query_params.get("end",-1)) + # query = request.query_params.get("query","") + if end == -1: end = None + submissions = Submission.objects.filter(problem=problem) + total = submissions.count() + if submissions.count() == 0: return Response({"submissions": []},status=status.HTTP_204_NO_CONTENT) submissions = submissions.order_by('-date') + submissions = submissions[start:end] result = [] @@ -23,6 +32,15 @@ def get_all_submissions_by_creator_problem(problem:Problem): submission.runtime_output = submission_testcases result.append(submission) + problem.testcases = Testcase.objects.filter(problem=problem,deprecated=False) + submissions_serializer = SubmissionPopulateSubmissionTestcaseAndAccountSerializer(result,many=True) + problem_serializer = ProblemPopulateTestcaseSerializer(problem) - return Response({"submissions": submissions_serializer.data},status=status.HTTP_200_OK) \ No newline at end of file + return Response({ + "problem": problem_serializer.data, + "submissions": submissions_serializer.data, + "start": start, + "end": end, + "total": total, + },status=status.HTTP_200_OK) \ No newline at end of file diff --git a/api/serializers.py b/api/serializers.py index 7f61023..72b59bf 100644 --- a/api/serializers.py +++ b/api/serializers.py @@ -131,6 +131,18 @@ class Meta: model = Testcase fields = "__all__" +class TestcasePartialSerializer(serializers.ModelSerializer): + class Meta: + model = Testcase + fields = ['testcase_id','runtime_status'] +class ProblemPopulatePartialTestcaseSerializer(serializers.ModelSerializer): + creator = AccountSecureSerializer() + testcases = TestcasePartialSerializer(many=True) + class Meta: + model = Problem + fields = "__all__" + # fields = ['problem_id','title','creator','testcases'] + include = ['testcases'] class ProblemPopulateTestcaseSerializer(serializers.ModelSerializer): creator = AccountSecureSerializer() testcases = TestcaseSerializer(many=True) diff --git a/api/views/submission.py b/api/views/submission.py index 1ede8e0..bd9ec4a 100644 --- a/api/views/submission.py +++ b/api/views/submission.py @@ -29,7 +29,7 @@ def account_problem_submission_view(request,problem_id,account_id): @api_view([GET]) def creator_problem_submissions_view(request,account_id,problem_id): problem = Problem.objects.get(problem_id=problem_id) - return get_all_submissions_by_creator_problem(problem) + return get_all_submissions_by_creator_problem(problem, request) @api_view([GET]) def all_submission_view(request):