Skip to content

Commit 05470ff

Browse files
authored
Optimize submission detail query (#4762)
1 parent dadb91c commit 05470ff

2 files changed

Lines changed: 24 additions & 21 deletions

File tree

backend/api/submissions/schema.py

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,27 @@
11
import random
2-
from api.context import Info
3-
from api.submissions.permissions import CanSeeSubmissionRestrictedFields
42

5-
from voting.helpers import check_if_user_can_vote
63
import strawberry
4+
import strawberry_django
75

6+
from api.context import Info
87
from api.permissions import CanSeeSubmissions, IsAuthenticated
8+
from api.submissions.permissions import CanSeeSubmissionRestrictedFields
99
from api.types import Paginated
10-
from conferences.models import Conference as ConferenceModel
11-
from submissions.models import (
12-
Submission as SubmissionModel,
13-
SubmissionTag as SubmissionTagModel,
14-
)
15-
from voting.models.vote import Vote
10+
from conferences import models as conference_models
11+
from submissions import models as submission_models
12+
from voting import models as voting_models
13+
from voting.helpers import check_if_user_can_vote
1614

1715
from .types import Submission, SubmissionTag
1816

1917

2018
@strawberry.type
2119
class SubmissionsQuery:
22-
@strawberry.field
20+
@strawberry_django.field
2321
def submission(self, info: Info, id: strawberry.ID) -> Submission | None:
2422
try:
25-
submission = SubmissionModel.objects.get_by_hashid(id)
26-
except SubmissionModel.DoesNotExist:
23+
submission = submission_models.Submission.objects.get_by_hashid(id)
24+
except submission_models.Submission.DoesNotExist:
2725
return None
2826
except IndexError:
2927
return None
@@ -33,7 +31,7 @@ def submission(self, info: Info, id: strawberry.ID) -> Submission | None:
3331
):
3432
return None
3533

36-
return submission
34+
return submission_models.Submission.objects.filter(id=submission.id)
3735

3836
@strawberry.field()
3937
def submissions(
@@ -60,7 +58,7 @@ def submissions(
6058

6159
request = info.context.request
6260
user = request.user
63-
conference = ConferenceModel.objects.filter(code=code).first()
61+
conference = conference_models.Conference.objects.filter(code=code).first()
6462

6563
if not only_accepted and not IsAuthenticated().has_permission(conference, info):
6664
raise PermissionError("User not logged in")
@@ -84,9 +82,9 @@ def submissions(
8482
)
8583

8684
if only_accepted:
87-
qs = qs.filter(status=SubmissionModel.STATUS.accepted)
85+
qs = qs.filter(status=submission_models.Submission.STATUS.accepted)
8886
else:
89-
qs = qs.filter(status=SubmissionModel.STATUS.proposed)
87+
qs = qs.filter(status=submission_models.Submission.STATUS.proposed)
9088

9189
if languages:
9290
qs = qs.filter(languages__code__in=languages)
@@ -115,7 +113,10 @@ def submissions(
115113

116114
info.context._my_votes = {
117115
vote.submission_id: vote
118-
for vote in Vote.objects.filter(user_id=user.id, submission__in=submissions)
116+
for vote in voting_models.Vote.objects.filter(
117+
user_id=user.id,
118+
submission__in=submissions,
119+
)
119120
}
120121

121122
return Paginated.paginate_list(
@@ -127,17 +128,19 @@ def submissions(
127128

128129
@strawberry.field
129130
def submission_tags(self, info: Info) -> list[SubmissionTag]:
130-
return SubmissionTagModel.objects.order_by("name").all()
131+
return submission_models.SubmissionTag.objects.order_by("name").all()
131132

132133
@strawberry.field
133134
def voting_tags(self, info: Info, conference: str) -> list[SubmissionTag]:
134135
used_tags = (
135-
SubmissionModel.objects.filter(
136+
submission_models.Submission.objects.filter(
136137
conference__code=conference,
137138
)
138139
.values_list("tags__id", flat=True)
139140
.distinct()
140141
)
141142
return (
142-
SubmissionTagModel.objects.filter(id__in=used_tags).order_by("name").all()
143+
submission_models.SubmissionTag.objects.filter(id__in=used_tags)
144+
.order_by("name")
145+
.all()
143146
)

backend/api/submissions/tests/test_submission_frontend_query.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ def test_submission_frontend_query(
131131
tag = submission.tags.get()
132132
graphql_client.force_login(user)
133133

134-
with django_assert_num_queries(13):
134+
with django_assert_num_queries(10):
135135
response = graphql_client.query(
136136
SUBMISSION_QUERY,
137137
variables={"id": submission.hashid, "language": "en"},

0 commit comments

Comments
 (0)