ФУНКЦИИ - МЕЖПРОЕКТНАЯ КОММУНИКАЦИЯ: очистка stale assignees Operational Core
This commit is contained in:
@@ -570,7 +570,15 @@ class IssueViewSet(BaseViewSet):
|
||||
Subquery(
|
||||
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))
|
||||
@@ -676,7 +684,14 @@ class IssueViewSet(BaseViewSet):
|
||||
distinct=True,
|
||||
filter=Q(
|
||||
~Q(assignees__id__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)
|
||||
& Q(issue_assignee__deleted_at__isnull=True)
|
||||
),
|
||||
),
|
||||
@@ -980,7 +995,15 @@ class IssuePaginatedViewSet(BaseViewSet):
|
||||
Subquery(
|
||||
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))
|
||||
@@ -1315,7 +1338,14 @@ class IssueDetailIdentifierEndpoint(BaseAPIView):
|
||||
distinct=True,
|
||||
filter=Q(
|
||||
~Q(assignees__id__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)
|
||||
& Q(issue_assignee__deleted_at__isnull=True)
|
||||
),
|
||||
),
|
||||
|
||||
@@ -18,7 +18,7 @@ from plane.app.serializers import (
|
||||
|
||||
from plane.app.permissions import WorkspaceUserPermission
|
||||
|
||||
from plane.db.models import Project, ProjectMember, ProjectUserProperty, WorkspaceMember
|
||||
from plane.db.models import IssueAssignee, Project, ProjectMember, ProjectUserProperty, WorkspaceMember
|
||||
from plane.bgtasks.project_add_user_email_task import project_add_user_email
|
||||
from plane.utils.host import base_host
|
||||
from plane.app.permissions.base import allow_permission, ROLE
|
||||
@@ -295,6 +295,7 @@ class ProjectMemberViewSet(BaseViewSet):
|
||||
|
||||
project_member.is_active = False
|
||||
project_member.save()
|
||||
IssueAssignee.objects.filter(project_id=project_id, assignee_id=project_member.member_id).delete()
|
||||
return Response(status=status.HTTP_204_NO_CONTENT)
|
||||
|
||||
@allow_permission([ROLE.ADMIN, ROLE.MEMBER, ROLE.GUEST])
|
||||
@@ -323,6 +324,7 @@ class ProjectMemberViewSet(BaseViewSet):
|
||||
# Deactivate the user
|
||||
project_member.is_active = False
|
||||
project_member.save()
|
||||
IssueAssignee.objects.filter(project_id=project_id, assignee_id=project_member.member_id).delete()
|
||||
return Response(status=status.HTTP_204_NO_CONTENT)
|
||||
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ from plane.app.serializers import (
|
||||
WorkSpaceMemberSerializer,
|
||||
)
|
||||
from plane.app.views.base import BaseAPIView
|
||||
from plane.db.models import Project, ProjectMember, WorkspaceMember, DraftIssue
|
||||
from plane.db.models import IssueAssignee, Project, ProjectMember, WorkspaceMember, DraftIssue
|
||||
from plane.utils.cache import invalidate_cache
|
||||
|
||||
from .. import BaseViewSet
|
||||
@@ -144,6 +144,7 @@ class WorkSpaceMemberViewSet(BaseViewSet):
|
||||
_ = ProjectMember.objects.filter(
|
||||
workspace__slug=slug, member_id=workspace_member.member_id, is_active=True
|
||||
).update(is_active=False, updated_at=timezone.now())
|
||||
IssueAssignee.objects.filter(workspace__slug=slug, assignee_id=workspace_member.member_id).delete()
|
||||
|
||||
workspace_member.is_active = False
|
||||
workspace_member.save()
|
||||
@@ -198,6 +199,7 @@ class WorkSpaceMemberViewSet(BaseViewSet):
|
||||
_ = ProjectMember.objects.filter(
|
||||
workspace__slug=slug, member_id=workspace_member.member_id, is_active=True
|
||||
).update(is_active=False, updated_at=timezone.now())
|
||||
IssueAssignee.objects.filter(workspace__slug=slug, assignee_id=workspace_member.member_id).delete()
|
||||
|
||||
# # Deactivate the user
|
||||
workspace_member.is_active = False
|
||||
|
||||
Reference in New Issue
Block a user