Compare commits

...

2 Commits

Author SHA1 Message Date
1f4ca52a10 add: markdown deletion 2025-06-27 12:06:28 +01:00
62c33c47c6 add: markdown deletion 2025-06-23 15:41:03 +01:00
2 changed files with 57 additions and 10 deletions

View File

@@ -268,7 +268,8 @@ def delete_markdown(markdown_id):
"""
Delete a markdown document.
This endpoint deletes an existing markdown document.
This endpoint deletes an existing markdown document and cascades the deletion
to related settings to avoid foreign key conflicts.
It requires authentication with the 'admin' role.
Request:
@@ -280,18 +281,60 @@ def delete_markdown(markdown_id):
Response Codes:
- 200: Deleted successfully
- 404: Markdown not found
- 500: Server error during cascade deletion
"""
with get_db() as session:
markdown = session.get(Markdown, markdown_id)
if markdown is None:
logger.error(f"failed to delete markdown: {markdown_id}")
try:
markdown = session.get(Markdown, markdown_id)
if markdown is None:
logger.error(f"failed to delete markdown: {markdown_id}")
errno = RequestContext.get_error_id()
return jsonify({"error": f"file not found - {errno}"}), 404
md = markdown.to_dict()
if markdown.setting_id:
markdown_setting = session.query(MarkdownSetting).get(markdown.setting_id)
if markdown_setting:
template_setting_id = markdown_setting.template_setting_id
permission_setting_id = markdown_setting.permission_setting_id
markdown_setting.template_setting_id = None
markdown_setting.permission_setting_id = None
session.flush()
if template_setting_id:
from db.models.MarkdownTemplateSetting import MarkdownTemplateSetting
template_setting = session.query(MarkdownTemplateSetting).get(template_setting_id)
if template_setting:
session.delete(template_setting)
if permission_setting_id:
permission_setting = session.query(MarkdownPermissionSetting).get(permission_setting_id)
if permission_setting:
session.delete(permission_setting)
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()
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()
return jsonify({"error": f"file not found - {errno}"}), 404
md = markdown.to_dict()
session.delete(markdown)
session.commit()
markdown_deleted.send(None, payload=md)
return jsonify(md), 200
session.rollback()
return jsonify({"error": f"delete failed - {errno}"}), 500
@markdown_bp.route('/move_forward/<int:markdown_id>', methods=['PATCH'])

View File

@@ -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: