Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature - Get related user stories info with project details #156

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
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
4 changes: 4 additions & 0 deletions taiga/projects/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

import uuid
import functools

from django.db.models import Prefetch
from easy_thumbnails.source_generators import pil_image
from dateutil.relativedelta import relativedelta

Expand Down Expand Up @@ -101,6 +103,8 @@ def _get_order_by_field_name(self):
def get_queryset(self):
qs = super().get_queryset()
qs = qs.select_related("owner")
user_stories_qs = UserStory.objects.all().select_related("status", "assigned_to")
qs = qs.prefetch_related(Prefetch("user_stories", queryset=user_stories_qs))
if self.request.QUERY_PARAMS.get('discover_mode', False):
qs = project_utils.attach_members(qs)
qs = project_utils.attach_notify_policies(qs)
Expand Down
7 changes: 7 additions & 0 deletions taiga/projects/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

from . import services
from .notifications.choices import NotifyLevel
from .userstories.serializers import UserStoryLightSerializer, UserStoryListSerializer


######################################################
Expand Down Expand Up @@ -441,6 +442,9 @@ class ProjectDetailSerializer(ProjectSerializer):
transfer_token = Field()
milestones = MethodField()

# User stories related to the project
user_stories = MethodField()

def get_milestones(self, obj):
assert hasattr(obj, "milestones_attr"), "instance must have a milestones_attr attribute"
if obj.milestones_attr is None:
Expand Down Expand Up @@ -509,6 +513,9 @@ def get_is_private_extra_info(self, obj):
def get_max_memberships(self, obj):
return services.get_max_memberships_for_project(obj)

def get_user_stories(self, obj):
return UserStoryLightSerializer(obj.user_stories.all(), many=True).data


class ProjectLightSerializer(serializers.LightSerializer):
id = Field()
Expand Down
Loading