in backend/code_review_backend/issues/api.py [0:0]
def get_queryset(self):
diffs = (
Diff.objects
# Because of the perf. hit filter issues that are not older than today - 3 months.
.filter(created__gte=date.today() - timedelta(days=90))
.prefetch_related(
Prefetch(
"issue_links",
queryset=IssueLink.objects.select_related("issue"),
),
"revision",
"revision__base_repository",
"revision__head_repository",
"repository",
)
.annotate(nb_issues=Count("issue_links"))
.annotate(
nb_errors=Count(
"issue_links", filter=Q(issue_links__issue__level=LEVEL_ERROR)
)
)
.annotate(
nb_warnings=Count(
"issue_links", filter=Q(issue_links__issue__level="warning")
)
)
.annotate(
nb_issues_publishable=Count(
"issue_links",
filter=Q(issue_links__in_patch=True)
| Q(issue_links__issue__level=LEVEL_ERROR),
)
)
.order_by("-id")
)
# Filter by repository
repository = self.request.query_params.get("repository")
if repository is not None:
diffs = diffs.filter(
Q(revision__base_repository__slug=repository)
| Q(revision__head_repository__slug=repository)
| Q(repository__slug=repository)
)
# Filter by text search query
query = self.request.query_params.get("search")
if query is not None:
search_query = (
Q(id__icontains=query)
| Q(revision__phabricator_id__icontains=query)
| Q(revision__bugzilla_id__icontains=query)
| Q(revision__title__icontains=query)
)
diffs = diffs.filter(search_query)
# Filter by issues types
issues = self.request.query_params.get("issues")
if issues == "any":
diffs = diffs.filter(nb_issues__gt=0)
elif issues == "publishable":
diffs = diffs.filter(nb_issues_publishable__gt=0)
elif issues == "no":
diffs = diffs.filter(nb_issues=0)
return diffs