ФУНКЦИИ - МЕЖПРОЕКТНАЯ КОММУНИКАЦИЯ: очистка stale assignees Operational Core

This commit is contained in:
DCCONSTRUCTIONS
2026-05-09 12:33:49 +03:00
parent fa4a533d29
commit 78deab1a23
10 changed files with 110 additions and 10 deletions
+22 -2
View File
@@ -5,7 +5,7 @@
# Django imports
from django.contrib.postgres.aggregates import ArrayAgg
from django.contrib.postgres.fields import ArrayField
from django.db.models import Q, UUIDField, Value, QuerySet, OuterRef, Subquery
from django.db.models import F, Q, UUIDField, Value, QuerySet, OuterRef, Subquery
from django.db.models.functions import Coalesce
# Module imports
@@ -37,8 +37,20 @@ def issue_queryset_grouper(
"module_ids": "issue_module__module_id",
}
valid_assignee_filter = (
Q(issue_assignee__deleted_at__isnull=True)
& Q(assignees__is_active=True)
& Q(assignees__member_workspace__workspace_id=F("workspace_id"))
& Q(assignees__member_workspace__is_active=True)
& Q(assignees__member_workspace__is_banned=False)
& Q(assignees__member_workspace__deleted_at__isnull=True)
& Q(assignees__member_project__project_id=F("project_id"))
& Q(assignees__member_project__is_active=True)
& Q(assignees__member_project__deleted_at__isnull=True)
)
GROUP_FILTER_MAPPER: Dict[str, Q] = {
"assignees__id": Q(issue_assignee__deleted_at__isnull=True),
"assignees__id": valid_assignee_filter,
"labels__id": Q(label_issue__deleted_at__isnull=True),
"issue_module__module_id": Q(issue_module__deleted_at__isnull=True),
}
@@ -51,6 +63,14 @@ def issue_queryset_grouper(
IssueAssignee.objects.filter(
issue_id=OuterRef("pk"),
deleted_at__isnull=True,
assignee__is_active=True,
assignee__member_workspace__workspace_id=OuterRef("workspace_id"),
assignee__member_workspace__is_active=True,
assignee__member_workspace__is_banned=False,
assignee__member_workspace__deleted_at__isnull=True,
assignee__member_project__project_id=OuterRef("project_id"),
assignee__member_project__is_active=True,
assignee__member_project__deleted_at__isnull=True,
)
.values("issue_id")
.annotate(arr=ArrayAgg("assignee_id", distinct=True))