diff --git a/api/v1/memo.go b/api/v1/memo.go index 28ddc9f6..59b01cc8 100644 --- a/api/v1/memo.go +++ b/api/v1/memo.go @@ -625,6 +625,13 @@ func (s *APIV1Service) DeleteMemo(c echo.Context) error { return echo.NewHTTPError(http.StatusUnauthorized, "Unauthorized") } + if memoMessage, err := s.convertMemoFromStore(ctx, memo); err == nil { + // Try to dispatch webhook when memo is deleted. + if err := s.DispatchMemoDeletedWebhook(ctx, memoMessage); err != nil { + log.Warn("Failed to dispatch memo deleted webhook", zap.Error(err)) + } + } + if err := s.Store.DeleteMemo(ctx, &store.DeleteMemo{ ID: memoID, }); err != nil { @@ -958,6 +965,11 @@ func (s *APIV1Service) DispatchMemoUpdatedWebhook(ctx context.Context, memo *Mem return s.dispatchMemoRelatedWebhook(ctx, memo, "memos.memo.updated") } +// DispatchMemoDeletedWebhook dispatches webhook when memo is deletedd. +func (s *APIV1Service) DispatchMemoDeletedWebhook(ctx context.Context, memo *Memo) error { + return s.dispatchMemoRelatedWebhook(ctx, memo, "memos.memo.deleted") +} + func (s *APIV1Service) dispatchMemoRelatedWebhook(ctx context.Context, memo *Memo, activityType string) error { webhooks, err := s.Store.ListWebhooks(ctx, &store.FindWebhook{ CreatorID: &memo.CreatorID, diff --git a/api/v2/memo_service.go b/api/v2/memo_service.go index 257c9553..b3f18e0b 100644 --- a/api/v2/memo_service.go +++ b/api/v2/memo_service.go @@ -346,6 +346,13 @@ func (s *APIV2Service) DeleteMemo(ctx context.Context, request *apiv2pb.DeleteMe return nil, status.Errorf(codes.PermissionDenied, "permission denied") } + if memoMessage, err := s.convertMemoFromStore(ctx, memo); err == nil { + // Try to dispatch webhook when memo is deleted. + if err := s.DispatchMemoDeletedWebhook(ctx, memoMessage); err != nil { + log.Warn("Failed to dispatch memo deleted webhook", zap.Error(err)) + } + } + if err = s.Store.DeleteMemo(ctx, &store.DeleteMemo{ ID: request.Id, }); err != nil { @@ -740,6 +747,11 @@ func (s *APIV2Service) DispatchMemoUpdatedWebhook(ctx context.Context, memo *api return s.dispatchMemoRelatedWebhook(ctx, memo, "memos.memo.updated") } +// DispatchMemoDeletedWebhook dispatches webhook when memo is deleted. +func (s *APIV2Service) DispatchMemoDeletedWebhook(ctx context.Context, memo *apiv2pb.Memo) error { + return s.dispatchMemoRelatedWebhook(ctx, memo, "memos.memo.deleted") +} + func (s *APIV2Service) dispatchMemoRelatedWebhook(ctx context.Context, memo *apiv2pb.Memo, activityType string) error { webhooks, err := s.Store.ListWebhooks(ctx, &store.FindWebhook{ CreatorID: &memo.CreatorId,