Improving timeline API performance
parent
9ecf762e11
commit
afb5af1527
|
@ -76,15 +76,23 @@ class TimelineViewSet(ReadOnlyListViewSet):
|
|||
qs = self.get_timeline(obj)
|
||||
|
||||
if request.GET.get("only_relevant", None) is not None:
|
||||
qs = qs.exclude(event_type="issues.issue.change", data__at_values_diff="{}")
|
||||
qs = qs.exclude(event_type="tasks.task.change", data__at_values_diff="{}")
|
||||
qs = qs.exclude(event_type="userstories.userstory.change", data__at_values_diff="{}")
|
||||
qs = qs.exclude(event_type="wiki.wikipage.change", data__at_values_diff="{}")
|
||||
qs = qs.exclude(event_type="issues.issue.delete")
|
||||
qs = qs.exclude(event_type="tasks.task.delete")
|
||||
qs = qs.exclude(event_type="userstories.userstory.delete")
|
||||
qs = qs.exclude(event_type="wiki.wikipage.delete")
|
||||
qs = qs.exclude(event_type="projects.project.change")
|
||||
qs = qs.extra(where=[
|
||||
"""
|
||||
NOT(
|
||||
data::text LIKE '%%\"values_diff\": {}%%'
|
||||
AND
|
||||
event_type::text = ANY('{issues.issue.change,
|
||||
tasks.task.change,
|
||||
userstories.userstory.change,
|
||||
wiki.wikipage.change}'::text[])
|
||||
)
|
||||
"""])
|
||||
|
||||
qs = qs.exclude(event_type__in=["issues.issue.delete",
|
||||
"tasks.task.delete",
|
||||
"userstories.userstory.delete",
|
||||
"wiki.wikipage.delete",
|
||||
"projects.project.change"])
|
||||
|
||||
return self.response_for_queryset(qs)
|
||||
|
||||
|
|
|
@ -130,10 +130,9 @@ def filter_timeline_for_user(timeline, user):
|
|||
# Filtering private projects where user is member
|
||||
if not user.is_anonymous():
|
||||
for membership in user.cached_memberships:
|
||||
for content_type_key, content_type in content_types.items():
|
||||
if content_type_key in membership.role.permissions or membership.is_owner:
|
||||
tl_filter |= Q(project=membership.project, data_content_type=content_type)
|
||||
tl_filter |= Q(project=membership.project, data_content_type=membership_content_type)
|
||||
data_content_types = list(filter(None, [content_types.get(a, None) for a in membership.role.permissions]))
|
||||
data_content_types.append(membership_content_type)
|
||||
tl_filter |= Q(project=membership.project, data_content_type__in=data_content_types)
|
||||
|
||||
timeline = timeline.filter(tl_filter)
|
||||
return timeline
|
||||
|
|
Loading…
Reference in New Issue