UI - МЕЖПРОЕКТНАЯ КОММУНИКАЦИЯ: новый дизайн и полировка карточек внутреннего контура

This commit is contained in:
DCCONSTRUCTIONS
2026-04-19 13:53:32 +03:00
parent a4eaf4b247
commit fc72c35e5a
14 changed files with 371 additions and 46 deletions
@@ -846,9 +846,13 @@ class IssueListDetailSerializer(serializers.Serializer):
"created_at": instance.created_at,
"updated_at": instance.updated_at,
"created_by": instance.created_by_id,
"created_by_avatar_url": getattr(instance, "created_by_avatar_url", None),
"created_by_detail": UserLiteSerializer(instance.created_by).data if instance.created_by else None,
"created_by_display_name": getattr(instance, "created_by_display_name", None),
"updated_by": instance.updated_by_id,
"is_draft": instance.is_draft,
"archived_at": instance.archived_at,
"source_project_name": getattr(instance, "source_project_name", None),
# Computed fields
"cycle_id": instance.cycle_id,
"module_ids": self.get_module_ids(instance),
@@ -113,6 +113,18 @@ class IssueListEndpoint(BaseAPIView):
CycleIssue.objects.filter(issue=OuterRef("id"), deleted_at__isnull=True).values("cycle_id")[:1]
)
)
.annotate(
created_by_display_name=F("created_by__display_name"),
created_by_avatar_url=F("created_by__avatar"),
)
.annotate(
source_project_name=Subquery(
IntakeIssue.objects.filter(
issue_id=OuterRef("id"),
extra__bridge="external-contours",
).values("extra__source_project_name")[:1]
)
)
.annotate(
link_count=IssueLink.objects.filter(issue=OuterRef("id"))
.order_by()
@@ -180,12 +192,15 @@ class IssueListEndpoint(BaseAPIView):
"created_at",
"updated_at",
"created_by",
"created_by_display_name",
"created_by_avatar_url",
"updated_by",
"attachment_count",
"link_count",
"is_draft",
"archived_at",
"deleted_at",
"source_project_name",
)
datetime_fields = ["created_at", "updated_at"]
issues = user_timezone_converter(issues, datetime_fields, request.user.user_timezone)
@@ -206,7 +221,7 @@ class IssueViewSet(BaseViewSet):
issues = Issue.issue_objects.filter(
project_id=self.kwargs.get("project_id"),
workspace__slug=self.kwargs.get("slug"),
).distinct()
).select_related("created_by").distinct()
return issues
@@ -217,6 +232,18 @@ class IssueViewSet(BaseViewSet):
CycleIssue.objects.filter(issue=OuterRef("id"), deleted_at__isnull=True).values("cycle_id")[:1]
)
)
.annotate(
created_by_display_name=F("created_by__display_name"),
created_by_avatar_url=F("created_by__avatar"),
)
.annotate(
source_project_name=Subquery(
IntakeIssue.objects.filter(
issue_id=OuterRef("id"),
extra__bridge="external-contours",
).values("extra__source_project_name")[:1]
)
)
.annotate(
link_count=Subquery(
IssueLink.objects.filter(issue=OuterRef("id"))
@@ -445,6 +472,8 @@ class IssueViewSet(BaseViewSet):
"created_at",
"updated_at",
"created_by",
"created_by_display_name",
"created_by_avatar_url",
"updated_by",
"attachment_count",
"link_count",
@@ -121,12 +121,15 @@ def issue_on_results(
"created_at",
"updated_at",
"created_by",
"created_by_display_name",
"created_by_avatar_url",
"updated_by",
"attachment_count",
"link_count",
"is_draft",
"archived_at",
"state__group",
"source_project_name",
]
if group_by in FIELD_MAPPER: