diff --git a/apiserver/plane/api/views/cycle.py b/apiserver/plane/api/views/cycle.py index df95a1b7a..9265aca00 100644 --- a/apiserver/plane/api/views/cycle.py +++ b/apiserver/plane/api/views/cycle.py @@ -48,6 +48,28 @@ class CycleViewSet(BaseViewSet): project_id=self.kwargs.get("project_id"), owned_by=self.request.user ) + def perform_destroy(self, instance): + cycle_issues = list( + CycleIssue.objects.filter(cycle_id=self.kwargs.get("pk")).values_list( + "issue", flat=True + ) + ) + issue_activity.delay( + type="cycle.activity.deleted", + requested_data=json.dumps( + { + "cycle_id": str(self.kwargs.get("pk")), + "issues": [str(issue_id) for issue_id in cycle_issues], + } + ), + actor_id=str(self.request.user.id), + issue_id=str(self.kwargs.get("pk", None)), + project_id=str(self.kwargs.get("project_id", None)), + current_instance=None, + ) + + return super().perform_destroy(instance) + def get_queryset(self): subquery = CycleFavorite.objects.filter( user=self.request.user, @@ -181,6 +203,22 @@ class CycleIssueViewSet(BaseViewSet): cycle_id=self.kwargs.get("cycle_id"), ) + def perform_destroy(self, instance): + issue_activity.delay( + type="cycle.activity.deleted", + requested_data=json.dumps( + { + "cycle_id": str(self.kwargs.get("cycle_id")), + "issues": [str(instance.issue_id)], + } + ), + actor_id=str(self.request.user.id), + issue_id=str(self.kwargs.get("pk", None)), + project_id=str(self.kwargs.get("project_id", None)), + current_instance=None, + ) + return super().perform_destroy(instance) + def get_queryset(self): return self.filter_queryset( super() @@ -286,9 +324,9 @@ class CycleIssueViewSet(BaseViewSet): # Get all CycleIssues already created cycle_issues = list(CycleIssue.objects.filter(issue_id__in=issues)) - records_to_update = [] update_cycle_issue_activity = [] record_to_create = [] + records_to_update = [] for issue in issues: cycle_issue = [ @@ -333,7 +371,7 @@ class CycleIssueViewSet(BaseViewSet): # Capture Issue Activity issue_activity.delay( - type="issue.activity.updated", + type="cycle.activity.created", requested_data=json.dumps({"cycles_list": issues}), actor_id=str(self.request.user.id), issue_id=str(self.kwargs.get("pk", None)), diff --git a/apiserver/plane/bgtasks/issue_activites_task.py b/apiserver/plane/bgtasks/issue_activites_task.py index e8a72c0f5..c749d9c15 100644 --- a/apiserver/plane/bgtasks/issue_activites_task.py +++ b/apiserver/plane/bgtasks/issue_activites_task.py @@ -506,63 +506,6 @@ def track_blockings( ) -def track_cycles( - requested_data, - current_instance, - issue_id, - project, - actor, - issue_activities, -): - # Updated Records: - updated_records = current_instance.get("updated_cycle_issues", []) - created_records = json.loads(current_instance.get("created_cycle_issues", [])) - - for updated_record in updated_records: - old_cycle = Cycle.objects.filter( - pk=updated_record.get("old_cycle_id", None) - ).first() - new_cycle = Cycle.objects.filter( - pk=updated_record.get("new_cycle_id", None) - ).first() - - issue_activities.append( - IssueActivity( - issue_id=updated_record.get("issue_id"), - actor=actor, - verb="updated", - old_value=old_cycle.name, - new_value=new_cycle.name, - field="cycles", - project=project, - workspace=project.workspace, - comment=f"{actor.email} updated cycle from {old_cycle.name} to {new_cycle.name}", - old_identifier=old_cycle.id, - new_identifier=new_cycle.id, - ) - ) - - for created_record in created_records: - cycle = Cycle.objects.filter( - pk=created_record.get("fields").get("cycle") - ).first() - - issue_activities.append( - IssueActivity( - issue_id=created_record.get("fields").get("issue"), - actor=actor, - verb="created", - old_value="", - new_value=cycle.name, - field="cycles", - project=project, - workspace=project.workspace, - comment=f"{actor.email} added cycle {cycle.name}", - new_identifier=cycle.id, - ) - ) - - def create_issue_activity( requested_data, current_instance, issue_id, project, actor, issue_activities ): @@ -627,7 +570,6 @@ def update_issue_activity( "assignees_list": track_assignees, "blocks_list": track_blocks, "blockers_list": track_blockings, - "cycles_list": track_cycles, "estimate_point": track_estimate_points, } @@ -731,6 +673,92 @@ def delete_comment_activity( ) +def create_cycle_issue_activity( + requested_data, current_instance, issue_id, project, actor, issue_activities +): + requested_data = json.loads(requested_data) if requested_data is not None else None + current_instance = ( + json.loads(current_instance) if current_instance is not None else None + ) + + # Updated Records: + updated_records = current_instance.get("updated_cycle_issues", []) + created_records = json.loads(current_instance.get("created_cycle_issues", [])) + + for updated_record in updated_records: + old_cycle = Cycle.objects.filter( + pk=updated_record.get("old_cycle_id", None) + ).first() + new_cycle = Cycle.objects.filter( + pk=updated_record.get("new_cycle_id", None) + ).first() + + issue_activities.append( + IssueActivity( + issue_id=updated_record.get("issue_id"), + actor=actor, + verb="updated", + old_value=old_cycle.name, + new_value=new_cycle.name, + field="cycles", + project=project, + workspace=project.workspace, + comment=f"{actor.email} updated cycle from {old_cycle.name} to {new_cycle.name}", + old_identifier=old_cycle.id, + new_identifier=new_cycle.id, + ) + ) + + for created_record in created_records: + cycle = Cycle.objects.filter( + pk=created_record.get("fields").get("cycle") + ).first() + + issue_activities.append( + IssueActivity( + issue_id=created_record.get("fields").get("issue"), + actor=actor, + verb="created", + old_value="", + new_value=cycle.name, + field="cycles", + project=project, + workspace=project.workspace, + comment=f"{actor.email} added cycle {cycle.name}", + new_identifier=cycle.id, + ) + ) + + +def delete_cycle_issue_activity( + requested_data, current_instance, issue_id, project, actor, issue_activities +): + requested_data = json.loads(requested_data) if requested_data is not None else None + current_instance = ( + json.loads(current_instance) if current_instance is not None else None + ) + + cycle_id = requested_data.get("cycle_id", "") + cycle = Cycle.objects.filter(pk=cycle_id).first() + issues = requested_data.get("issues") + + for issue in issues: + issue_activities.append( + IssueActivity( + issue_id=issue, + actor=actor, + verb="deleted", + old_value=cycle.name if cycle is not None else "", + new_value="", + field="cycles", + project=project, + workspace=project.workspace, + comment=f"{actor.email} removed this issue from {cycle.name if cycle is not None else None}", + old_identifier=cycle.id if cycle is not None else None, + ) + ) + + def create_module_issue_activity( requested_data, current_instance, issue_id, project, actor, issue_activities ): @@ -938,6 +966,8 @@ def issue_activity( "comment.activity.created": create_comment_activity, "comment.activity.updated": update_comment_activity, "comment.activity.deleted": delete_comment_activity, + "cycle.activity.created": create_cycle_issue_activity, + "cycle.activity.deleted": delete_cycle_issue_activity, "module.activity.created": create_module_issue_activity, "module.activity.deleted": delete_module_issue_activity, "link.activity.created": create_link_activity,