diff --git a/api/markdown.py b/api/markdown.py index cc2166b..9c09184 100644 --- a/api/markdown.py +++ b/api/markdown.py @@ -317,15 +317,21 @@ def delete_markdown(markdown_id): session.delete(markdown_setting) + # Send webhook event before committing the transaction + # This ensures webhook handlers can still access related data + markdown_deleted.send(None, payload=md) + session.delete(markdown) session.commit() - markdown_deleted.send(None, payload=md) logger.info(f"Successfully deleted markdown {markdown_id} with cascade deletion") return jsonify(md), 200 except Exception as e: + import traceback logger.error(f"Failed to delete markdown {markdown_id}: {e}") + logger.error(f"Exception type: {type(e).__name__}") + logger.error(f"Full traceback:\n{traceback.format_exc()}") errno = RequestContext.get_error_id() session.rollback() return jsonify({"error": f"delete failed - {errno}"}), 500 diff --git a/events/WebhookEventHandlers/__init__.py b/events/WebhookEventHandlers/__init__.py index 6cf704d..feac0be 100644 --- a/events/WebhookEventHandlers/__init__.py +++ b/events/WebhookEventHandlers/__init__.py @@ -59,6 +59,10 @@ class WebhookEventHandler(abc.ABC): if webhook_setting is None and p["parent_id"] != 1: return self.get_setting(session, p["parent_id"]) + + # Check if webhook_setting is still None (e.g., when parent_id == 1 or no parent found) + if webhook_setting is None: + return None setting = webhook_setting.to_dict() if not setting["enabled"] or setting["on_events"] & self.event_type == 0: