|
|
|
|
@@ -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'])
|
|
|
|
|
|