Compare commits
2 Commits
692c0794c5
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 1f4ca52a10 | |||
| 62c33c47c6 |
@@ -268,7 +268,8 @@ def delete_markdown(markdown_id):
|
|||||||
"""
|
"""
|
||||||
Delete a markdown document.
|
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.
|
It requires authentication with the 'admin' role.
|
||||||
|
|
||||||
Request:
|
Request:
|
||||||
@@ -280,19 +281,61 @@ def delete_markdown(markdown_id):
|
|||||||
Response Codes:
|
Response Codes:
|
||||||
- 200: Deleted successfully
|
- 200: Deleted successfully
|
||||||
- 404: Markdown not found
|
- 404: Markdown not found
|
||||||
|
- 500: Server error during cascade deletion
|
||||||
"""
|
"""
|
||||||
with get_db() as session:
|
with get_db() as session:
|
||||||
|
try:
|
||||||
markdown = session.get(Markdown, markdown_id)
|
markdown = session.get(Markdown, markdown_id)
|
||||||
if markdown is None:
|
if markdown is None:
|
||||||
logger.error(f"failed to delete markdown: {markdown_id}")
|
logger.error(f"failed to delete markdown: {markdown_id}")
|
||||||
errno = RequestContext.get_error_id()
|
errno = RequestContext.get_error_id()
|
||||||
return jsonify({"error": f"file not found - {errno}"}), 404
|
return jsonify({"error": f"file not found - {errno}"}), 404
|
||||||
|
|
||||||
md = markdown.to_dict()
|
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.delete(markdown)
|
||||||
session.commit()
|
session.commit()
|
||||||
markdown_deleted.send(None, payload=md)
|
|
||||||
|
logger.info(f"Successfully deleted markdown {markdown_id} with cascade deletion")
|
||||||
return jsonify(md), 200
|
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
|
||||||
|
|
||||||
|
|
||||||
@markdown_bp.route('/move_forward/<int:markdown_id>', methods=['PATCH'])
|
@markdown_bp.route('/move_forward/<int:markdown_id>', methods=['PATCH'])
|
||||||
@require_auth(roles=['admin'])
|
@require_auth(roles=['admin'])
|
||||||
|
|||||||
@@ -60,6 +60,10 @@ class WebhookEventHandler(abc.ABC):
|
|||||||
if webhook_setting is None and p["parent_id"] != 1:
|
if webhook_setting is None and p["parent_id"] != 1:
|
||||||
return self.get_setting(session, p["parent_id"])
|
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()
|
setting = webhook_setting.to_dict()
|
||||||
if not setting["enabled"] or setting["on_events"] & self.event_type == 0:
|
if not setting["enabled"] or setting["on_events"] & self.event_type == 0:
|
||||||
return None
|
return None
|
||||||
|
|||||||
Reference in New Issue
Block a user