From dc78854db019fe7ec93163d14793c8cbe2240fd7 Mon Sep 17 00:00:00 2001 From: shuaixr <1025sxr@gmail.com> Date: Sat, 1 Feb 2025 01:43:06 -0800 Subject: [PATCH 1/3] fix: prevent error when triggering deletion webhook The deletion webhook was not firing because it attempted to retrieve data after deletion, causing a failure. According to the webhook documentation https://developers.plane.so/webhooks/intro-webhooks, the delete event should only contain id, so the fix aligns with this expected behavior. --- apiserver/plane/bgtasks/webhook_task.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apiserver/plane/bgtasks/webhook_task.py b/apiserver/plane/bgtasks/webhook_task.py index 141daf79629..c1ea01a4dcd 100644 --- a/apiserver/plane/bgtasks/webhook_task.py +++ b/apiserver/plane/bgtasks/webhook_task.py @@ -387,7 +387,11 @@ def webhook_activity( webhook=webhook.id, slug=slug, event=event, - event_data=get_model_data(event=event, event_id=event_id), + event_data=( + {"id": event_id} + if verb == "deleted" + else get_model_data(event=event, event_id=event_id) + ), action=verb, current_site=current_site, activity={ From 74b1623af5cd15b46d0ce1b9e050d4c18756c543 Mon Sep 17 00:00:00 2001 From: shuaixr <1025sxr@gmail.com> Date: Sat, 1 Feb 2025 01:50:28 -0800 Subject: [PATCH 2/3] fix: make delete_comment_activity include comment_id The delete issues comment webhook requires comment_id --- apiserver/plane/bgtasks/issue_activities_task.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apiserver/plane/bgtasks/issue_activities_task.py b/apiserver/plane/bgtasks/issue_activities_task.py index e0e2ea84e90..2113819797e 100644 --- a/apiserver/plane/bgtasks/issue_activities_task.py +++ b/apiserver/plane/bgtasks/issue_activities_task.py @@ -738,8 +738,10 @@ def delete_comment_activity( issue_activities, epoch, ): + requested_data = json.loads(requested_data) if requested_data is not None else None issue_activities.append( IssueActivity( + issue_comment_id=requested_data.get("comment_id", None), issue_id=issue_id, project_id=project_id, workspace_id=workspace_id, From f04dc5d1ec78ff9395ace69a31b881e1a6940953 Mon Sep 17 00:00:00 2001 From: shuaixr <1025sxr@gmail.com> Date: Sat, 1 Feb 2025 02:48:13 -0800 Subject: [PATCH 3/3] fix: trigger webhook on project delete --- apiserver/plane/api/views/project.py | 15 ++++++++++++++- apiserver/plane/app/views/project/base.py | 16 ++++++++++++++-- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/apiserver/plane/api/views/project.py b/apiserver/plane/api/views/project.py index 824ca6b5e31..e98f35d5730 100644 --- a/apiserver/plane/api/views/project.py +++ b/apiserver/plane/api/views/project.py @@ -28,7 +28,7 @@ Workspace, UserFavorite, ) -from plane.bgtasks.webhook_task import model_activity +from plane.bgtasks.webhook_task import model_activity, webhook_activity from .base import BaseAPIView @@ -326,6 +326,19 @@ def delete(self, request, slug, pk): entity_type="project", entity_identifier=pk, project_id=pk ).delete() project.delete() + webhook_activity.delay( + event="project", + verb="deleted", + field=None, + old_value=None, + new_value=None, + actor_id=request.user.id, + slug=slug, + current_site=request.META.get("HTTP_ORIGIN"), + event_id=project.id, + old_identifier=None, + new_identifier=None, + ) return Response(status=status.HTTP_204_NO_CONTENT) diff --git a/apiserver/plane/app/views/project/base.py b/apiserver/plane/app/views/project/base.py index 9123e6d87fb..8988fc3ee48 100644 --- a/apiserver/plane/app/views/project/base.py +++ b/apiserver/plane/app/views/project/base.py @@ -39,7 +39,7 @@ WorkspaceMember, ) from plane.utils.cache import cache_response -from plane.bgtasks.webhook_task import model_activity +from plane.bgtasks.webhook_task import model_activity, webhook_activity from plane.bgtasks.recent_visited_task import recent_visited_task from plane.utils.exception_logger import log_exception @@ -462,7 +462,19 @@ def destroy(self, request, slug, pk): ): project = Project.objects.get(pk=pk) project.delete() - + webhook_activity.delay( + event="project", + verb="deleted", + field=None, + old_value=None, + new_value=None, + actor_id=request.user.id, + slug=slug, + current_site=request.META.get("HTTP_ORIGIN"), + event_id=project.id, + old_identifier=None, + new_identifier=None, + ) # Delete the project members DeployBoard.objects.filter(project_id=pk, workspace__slug=slug).delete()