Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 20 additions & 2 deletions api/controllers/problem/get_all_problems_by_account.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,35 @@
from django.forms.models import model_to_dict
from ...serializers import *

def get_all_problems_by_account(account:Account):
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))
if end == -1: end = None

personalProblems = Problem.objects.filter(creator=account).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')
maxManageable = len(manageableProblems)
if start < maxManageable and start < maxManageable:
manageableProblems = manageableProblems[start:end]
for problem in manageableProblems:
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)

return Response({"problems":personalSerialize.data,"manageable_problems":manageableSerialize.data},status=status.HTTP_200_OK)
return Response({
"start":start,
"end":end,
"total_personal_problems": maxPersonal,
"total_manageable_problems": maxManageable,
"problems":personalSerialize.data,
"manageable_problems":manageableSerialize.data
},status=status.HTTP_200_OK)
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
from api.utility import passwordEncryption
from rest_framework.response import Response
from rest_framework.decorators import api_view
from api.sandbox.grader import PythonGrader
from ...constant import GET,POST,PUT,DELETE
from ...models import *
from rest_framework import status
from django.forms.models import model_to_dict
from ...serializers import *

def get_all_submissions_by_creator_problem(problem:Problem):
submissions = Submission.objects.filter(problem=problem)

if submissions.count() == 0:
return Response({"submissions": []},status=status.HTTP_204_NO_CONTENT)

submissions = submissions.order_by('-date')

result = []

for submission in submissions:
submission_testcases = SubmissionTestcase.objects.filter(submission=submission)
submission.runtime_output = submission_testcases
result.append(submission)

submissions_serializer = SubmissionPopulateSubmissionTestcaseAndAccountSerializer(result,many=True)

return Response({"submissions": submissions_serializer.data},status=status.HTTP_200_OK)
37 changes: 19 additions & 18 deletions api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,21 +131,8 @@ class ProblemPopulateTestcaseSerializer(serializers.ModelSerializer):
testcases = TestcaseSerializer(many=True)
class Meta:
model = Problem
fields = [
'problem_id',
'language',
'title',
'description',
'solution',
'time_limit',
'is_active',
'is_private',
'submission_regex',
'created_date',
'updated_date',
'creator',
'testcases'
]
fields = "__all__"
include = ['testcases']

# class ProblemPopulateAccountSecureSerializer(serializers.ModelSerializer):
# creator = AccountSecureSerializer()
Expand Down Expand Up @@ -185,13 +172,19 @@ class ProblemPopulateAccountAndSubmissionPopulateSubmissionTestcasesSecureSerial
best_submission = SubmissionPopulateSubmissionTestcaseSecureSerializer()
class Meta:
model = Problem
fields = problem_secure_fields + ['best_submission','creator']
# fields = problem_secure_fields + ['best_submission','creator']
fields = "__all__"
include = ['best_submission','creator']
exlude = ['solution','submission_regex','is_private','is_active','sharing']

class ProblemPopulatSubmissionPopulateSubmissionTestcasesSecureSerializer(serializers.ModelSerializer):
best_submission = SubmissionPopulateSubmissionTestcaseSecureSerializer()
class Meta:
model = Problem
fields = problem_secure_fields + ['best_submission']
# fields = problem_secure_fields + ['best_submission']
fields = "__all__"
include = ['best_submission','creator']
exlude = ['solution','submission_regex','is_private','is_active','sharing']
class TopicCollectionPopulateCollectionSerializer(serializers.ModelSerializer):
collection = CollectionSerializer()
class Meta:
Expand Down Expand Up @@ -380,4 +373,12 @@ class CollectionPopulateCollectionProblemsPopulateProblemPopulateAccountAndTestc
class Meta:
model = Collection
fields = "__all__"
include = ['problems','group_permissions']
include = ['problems','group_permissions']

class SubmissionPopulateSubmissionTestcaseAndAccountSerializer(serializers.ModelSerializer):
runtime_output = SubmissionTestcaseSerializer(many=True)
account = AccountSecureSerializer()
class Meta:
model = Submission
fields = "__all__"
include = ['runtime_output']
3 changes: 2 additions & 1 deletion api/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
path('accounts/<str:account_id>/problems',problem.all_problems_creator_view),
path('accounts/<str:account_id>/problems/<str:problem_id>',problem.one_problem_creator_view),
path('accounts/<str:account_id>/problems/<str:problem_id>/groups',problem.problem_group_view),
path("accounts/<str:account_id>/problems/<str:problem_id>/submissions",submission.account_problem_submission_view),
path("accounts/<str:account_id>/problems/<str:problem_id>/submissions",submission.creator_problem_submissions_view),
path("accounts/<str:account_id>/topics/<str:topic_id>/problems/<str:problem_id>/submissions",submission.topic_account_problem_submission_view),

path('accounts/<str:account_id>/collections',collection.all_collections_creator_view),
Expand All @@ -33,6 +33,7 @@
path('problems',problem.all_problems_view),
path('problems/validate',problem.validation_view),
path('problems/<str:problem_id>',problem.one_problem_view),
path("problems/<str:problem_id>/accounts/<str:account_id>/submissions",submission.account_problem_submission_view),
path('topics/<str:topic_id>/problems/<str:problem_id>/accounts/<str:account_id>',problem.problem_in_topic_account_view),

path('collections',collection.all_collections_view),
Expand Down
2 changes: 1 addition & 1 deletion api/views/problem.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ def all_problems_creator_view(request,account_id):
if request.method == POST:
return create_problem(account_id,request)
if request.method == GET:
return get_all_problems_by_account(account_id)
return get_all_problems_by_account(account_id,request)

@api_view([GET,PUT,DELETE])
def one_problem_creator_view(request,problem_id:str,account_id:str):
Expand Down
6 changes: 6 additions & 0 deletions api/views/submission.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
from ..controllers.submission.get_submissions_by_account_problem import *
from ..controllers.submission.submit_problem_on_topic import *
from ..controllers.submission.get_submissions_by_account_problem_in_topic import *
from ..controllers.submission.get_all_submissions_by_creator_problem import *


@api_view([POST,GET])
Expand All @@ -25,6 +26,11 @@ def account_problem_submission_view(request,problem_id,account_id):
if request.method == GET:
return get_submissions_by_account_problem(account_id,problem_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)

@api_view([GET])
def all_submission_view(request):
return get_submission_by_quries(request)
Expand Down