diff --git a/apiserver/plane/api/views/module.py b/apiserver/plane/api/views/module.py index 0abf47c8b..8f0cabeaf 100644 --- a/apiserver/plane/api/views/module.py +++ b/apiserver/plane/api/views/module.py @@ -109,6 +109,28 @@ class ModuleViewSet(BaseViewSet): .order_by("-is_favorite", "name") ) + def perform_destroy(self, instance): + module_issues = list( + ModuleIssue.objects.filter(module_id=self.kwargs.get("pk")).values_list( + "issue", flat=True + ) + ) + issue_activity.delay( + type="module.activity.deleted", + requested_data=json.dumps( + { + "module_id": str(self.kwargs.get("pk")), + "issues": [str(issue_id) for issue_id in module_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 create(self, request, slug, project_id): try: project = Project.objects.get(workspace__slug=slug, pk=project_id) @@ -158,6 +180,22 @@ class ModuleIssueViewSet(BaseViewSet): module_id=self.kwargs.get("module_id"), ) + def perform_destroy(self, instance): + issue_activity.delay( + type="module.activity.deleted", + requested_data=json.dumps( + { + "module_id": str(self.kwargs.get("module_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() @@ -302,7 +340,7 @@ class ModuleIssueViewSet(BaseViewSet): # Capture Issue Activity issue_activity.delay( - type="issue.activity.updated", + type="module.activity.created", requested_data=json.dumps({"modules_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 c513c3107..e8a72c0f5 100644 --- a/apiserver/plane/bgtasks/issue_activites_task.py +++ b/apiserver/plane/bgtasks/issue_activites_task.py @@ -563,62 +563,6 @@ def track_cycles( ) -def track_modules( - requested_data, - current_instance, - issue_id, - project, - actor, - issue_activities, -): - # Updated Records: - updated_records = current_instance.get("updated_module_issues", []) - created_records = json.loads(current_instance.get("created_module_issues", [])) - - for updated_record in updated_records: - old_module = Module.objects.filter( - pk=updated_record.get("old_module_id", None) - ).first() - new_module = Module.objects.filter( - pk=updated_record.get("new_module_id", None) - ).first() - - issue_activities.append( - IssueActivity( - issue_id=updated_record.get("issue_id"), - actor=actor, - verb="updated", - old_value=old_module.name, - new_value=new_module.name, - field="modules", - project=project, - workspace=project.workspace, - comment=f"{actor.email} updated module from {old_module.name} to {new_module.name}", - old_identifier=old_module.id, - new_identifier=new_module.id, - ) - ) - - for created_record in created_records: - module = Module.objects.filter( - pk=created_record.get("fields").get("module") - ).first() - issue_activities.append( - IssueActivity( - issue_id=created_record.get("fields").get("issue"), - actor=actor, - verb="created", - old_value="", - new_value=module.name, - field="modules", - project=project, - workspace=project.workspace, - comment=f"{actor.email} added module {module.name}", - new_identifier=module.id, - ) - ) - - def create_issue_activity( requested_data, current_instance, issue_id, project, actor, issue_activities ): @@ -684,7 +628,6 @@ def update_issue_activity( "blocks_list": track_blocks, "blockers_list": track_blockings, "cycles_list": track_cycles, - "modules_list": track_modules, "estimate_point": track_estimate_points, } @@ -788,6 +731,91 @@ def delete_comment_activity( ) +def create_module_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_module_issues", []) + created_records = json.loads(current_instance.get("created_module_issues", [])) + + for updated_record in updated_records: + old_module = Module.objects.filter( + pk=updated_record.get("old_module_id", None) + ).first() + new_module = Module.objects.filter( + pk=updated_record.get("new_module_id", None) + ).first() + + issue_activities.append( + IssueActivity( + issue_id=updated_record.get("issue_id"), + actor=actor, + verb="updated", + old_value=old_module.name, + new_value=new_module.name, + field="modules", + project=project, + workspace=project.workspace, + comment=f"{actor.email} updated module from {old_module.name} to {new_module.name}", + old_identifier=old_module.id, + new_identifier=new_module.id, + ) + ) + + for created_record in created_records: + module = Module.objects.filter( + pk=created_record.get("fields").get("module") + ).first() + issue_activities.append( + IssueActivity( + issue_id=created_record.get("fields").get("issue"), + actor=actor, + verb="created", + old_value="", + new_value=module.name, + field="modules", + project=project, + workspace=project.workspace, + comment=f"{actor.email} added module {module.name}", + new_identifier=module.id, + ) + ) + + +def delete_module_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 + ) + + module_id = requested_data.get("module_id", "") + module = Module.objects.filter(pk=module_id).first() + issues = requested_data.get("issues") + + for issue in issues: + issue_activities.append( + IssueActivity( + issue_id=issue, + actor=actor, + verb="deleted", + old_value=module.name if module is not None else "", + new_value="", + field="modules", + project=project, + workspace=project.workspace, + comment=f"{actor.email} removed this issue from {module.name if module is not None else None}", + old_identifier=module.id if module is not None else None, + ) + ) + + def create_link_activity( requested_data, current_instance, issue_id, project, actor, issue_activities ): @@ -910,6 +938,8 @@ def issue_activity( "comment.activity.created": create_comment_activity, "comment.activity.updated": update_comment_activity, "comment.activity.deleted": delete_comment_activity, + "module.activity.created": create_module_issue_activity, + "module.activity.deleted": delete_module_issue_activity, "link.activity.created": create_link_activity, "link.activity.updated": update_link_activity, "link.activity.deleted": delete_link_activity,