From 56bb47e785287932d9dc78ebf93a49612b8402bc Mon Sep 17 00:00:00 2001 From: Bavisetti Narayan <72156168+NarayanBavisetti@users.noreply.github.com> Date: Thu, 1 May 2025 19:21:35 +0530 Subject: [PATCH] [WEB-3995] chore: track entity state activity for draft issue (#3099) * chore: track entity state activity for draft issue * chore: added external api entity tracking --- apiserver/plane/api/views/issue.py | 62 ++++++++++++++++++++ apiserver/plane/app/views/workspace/draft.py | 14 +++++ 2 files changed, 76 insertions(+) diff --git a/apiserver/plane/api/views/issue.py b/apiserver/plane/api/views/issue.py index df81922858..da49008c77 100644 --- a/apiserver/plane/api/views/issue.py +++ b/apiserver/plane/api/views/issue.py @@ -64,6 +64,9 @@ from plane.bgtasks.webhook_task import model_activity from plane.payment.flags.flag_decorator import check_workspace_feature_flag from plane.payment.flags.flag import FeatureFlag from plane.ee.utils.workflow import WorkflowStateManager +from plane.ee.bgtasks.entity_issue_state_progress_task import ( + entity_issue_state_activity_task, +) class WorkspaceIssueAPIEndpoint(BaseAPIView): @@ -421,6 +424,22 @@ class IssueAPIEndpoint(BaseAPIView): current_instance=current_instance, epoch=int(timezone.now().timestamp()), ) + cycle_issue = CycleIssue.objects.filter(issue_id=issue.id).first() + if cycle_issue and ( + request.data.get("state_id") + or request.data.get("estimate_point") + ): + entity_issue_state_activity_task.delay( + issue_cycle_data=[ + { + "issue_id": str(issue.id), + "cycle_id": str(cycle_issue.cycle_id), + } + ], + user_id=str(request.user.id), + slug=slug, + action="UPDATED", + ) return Response(serializer.data, status=status.HTTP_200_OK) return Response( # If the serializer is not valid, respond with 400 bad @@ -461,6 +480,22 @@ class IssueAPIEndpoint(BaseAPIView): "created_by", request.user.id ) issue.save(update_fields=["created_at", "created_by"]) + cycle_issue = CycleIssue.objects.filter(issue_id=issue.id).first() + if cycle_issue and ( + request.data.get("state_id") + or request.data.get("estimate_point") + ): + entity_issue_state_activity_task.delay( + issue_cycle_data=[ + { + "issue_id": str(issue.id), + "cycle_id": str(cycle_issue.cycle_id), + } + ], + user_id=str(request.user.id), + slug=slug, + action="UPDATED", + ) issue_activity.delay( type="issue.activity.created", @@ -540,6 +575,21 @@ class IssueAPIEndpoint(BaseAPIView): current_instance=current_instance, epoch=int(timezone.now().timestamp()), ) + cycle_issue = CycleIssue.objects.filter(issue_id=pk).first() + if cycle_issue and ( + request.data.get("state_id") or request.data.get("estimate_point") + ): + entity_issue_state_activity_task.delay( + issue_cycle_data=[ + { + "issue_id": str(issue.id), + "cycle_id": str(cycle_issue.cycle_id), + } + ], + user_id=str(request.user.id), + slug=slug, + action="UPDATED", + ) return Response(serializer.data, status=status.HTTP_200_OK) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) @@ -561,6 +611,18 @@ class IssueAPIEndpoint(BaseAPIView): current_instance = json.dumps( IssueSerializer(issue).data, cls=DjangoJSONEncoder ) + cycle_issue = CycleIssue.objects.filter(issue_id=pk).first() + if cycle_issue: + # added a entry to remove from the entity issue state activity + entity_issue_state_activity_task.delay( + issue_cycle_data=[ + {"issue_id": str(issue.id), "cycle_id": str(cycle_issue.cycle_id)} + ], + user_id=str(request.user.id), + slug=slug, + action="REMOVED", + ) + # EE code end here issue.delete() issue_activity.delay( type="issue.activity.deleted", diff --git a/apiserver/plane/app/views/workspace/draft.py b/apiserver/plane/app/views/workspace/draft.py index a8c0bb78ab..950d176744 100644 --- a/apiserver/plane/app/views/workspace/draft.py +++ b/apiserver/plane/app/views/workspace/draft.py @@ -39,6 +39,9 @@ from plane.bgtasks.issue_activities_task import issue_activity from plane.utils.issue_filters import issue_filters from plane.utils.host import base_host from plane.ee.models import IssuePropertyValue, DraftIssuePropertyValue +from plane.ee.bgtasks.entity_issue_state_progress_task import ( + entity_issue_state_activity_task, +) class WorkspaceDraftIssueViewSet(BaseViewSet): @@ -290,6 +293,17 @@ class WorkspaceDraftIssueViewSet(BaseViewSet): created_by_id=draft_issue.created_by_id, updated_by_id=draft_issue.updated_by_id, ) + entity_issue_state_activity_task.delay( + issue_cycle_data=[ + { + "issue_id": str(serializer.data.get("id")), + "cycle_id": str(request.data.get("cycle_id")), + } + ], + user_id=str(request.user.id), + slug=slug, + action="ADDED", + ) # Capture Issue Activity issue_activity.delay( type="cycle.activity.created",