mirror of https://github.com/langgenius/dify.git
add delete comment and reply
This commit is contained in:
parent
d4a6acbd99
commit
816bdf0320
|
|
@ -118,7 +118,7 @@ class WorkflowCommentDetailApi(Resource):
|
|||
user_id=current_user.id,
|
||||
)
|
||||
|
||||
return {"message": "Comment deleted successfully"}, 200
|
||||
return {"result": "success"}, 204
|
||||
|
||||
|
||||
class WorkflowCommentResolveApi(Resource):
|
||||
|
|
@ -140,22 +140,6 @@ class WorkflowCommentResolveApi(Resource):
|
|||
|
||||
return comment
|
||||
|
||||
@login_required
|
||||
@setup_required
|
||||
@account_initialization_required
|
||||
@get_app_model
|
||||
@marshal_with(workflow_comment_resolve_fields)
|
||||
def delete(self, app_model: App, comment_id: str):
|
||||
"""Reopen a resolved workflow comment."""
|
||||
comment = WorkflowCommentService.reopen_comment(
|
||||
tenant_id=current_user.current_tenant_id,
|
||||
app_id=app_model.id,
|
||||
comment_id=comment_id,
|
||||
user_id=current_user.id,
|
||||
)
|
||||
|
||||
return comment
|
||||
|
||||
|
||||
class WorkflowCommentReplyApi(Resource):
|
||||
"""API for managing comment replies."""
|
||||
|
|
@ -229,7 +213,7 @@ class WorkflowCommentReplyDetailApi(Resource):
|
|||
|
||||
WorkflowCommentService.delete_reply(reply_id=reply_id, user_id=current_user.id)
|
||||
|
||||
return {"message": "Reply deleted successfully"}, 200
|
||||
return {"result": "success"}, 204
|
||||
|
||||
|
||||
# Register API routes
|
||||
|
|
|
|||
|
|
@ -177,14 +177,29 @@ class WorkflowCommentService:
|
|||
@staticmethod
|
||||
def delete_comment(tenant_id: str, app_id: str, comment_id: str, user_id: str) -> None:
|
||||
"""Delete a workflow comment."""
|
||||
comment = WorkflowCommentService.get_comment(tenant_id, app_id, comment_id)
|
||||
with Session(db.engine, expire_on_commit=False) as session:
|
||||
comment = WorkflowCommentService.get_comment(tenant_id, app_id, comment_id, session)
|
||||
|
||||
# Only the creator can delete the comment
|
||||
if comment.created_by != user_id:
|
||||
raise Forbidden("Only the comment creator can delete it")
|
||||
# Only the creator can delete the comment
|
||||
if comment.created_by != user_id:
|
||||
raise Forbidden("Only the comment creator can delete it")
|
||||
|
||||
db.session.delete(comment)
|
||||
db.session.commit()
|
||||
# Delete associated mentions (both comment and reply mentions)
|
||||
mentions = session.scalars(
|
||||
select(WorkflowCommentMention).where(WorkflowCommentMention.comment_id == comment_id)
|
||||
).all()
|
||||
for mention in mentions:
|
||||
session.delete(mention)
|
||||
|
||||
# Delete associated replies
|
||||
replies = session.scalars(
|
||||
select(WorkflowCommentReply).where(WorkflowCommentReply.comment_id == comment_id)
|
||||
).all()
|
||||
for reply in replies:
|
||||
session.delete(reply)
|
||||
|
||||
session.delete(comment)
|
||||
session.commit()
|
||||
|
||||
@staticmethod
|
||||
def resolve_comment(tenant_id: str, app_id: str, comment_id: str, user_id: str) -> WorkflowComment:
|
||||
|
|
@ -233,7 +248,7 @@ class WorkflowCommentService:
|
|||
# Create mention linking to specific reply
|
||||
mention = WorkflowCommentMention(
|
||||
comment_id=comment_id,
|
||||
reply_id=reply.id, # This is a reply mention
|
||||
reply_id=reply.id,
|
||||
mentioned_user_id=user_id
|
||||
)
|
||||
session.add(mention)
|
||||
|
|
@ -289,25 +304,33 @@ class WorkflowCommentService:
|
|||
session.add(mention)
|
||||
|
||||
session.commit()
|
||||
|
||||
return {
|
||||
"id": reply.id,
|
||||
"updated_at": reply.updated_at
|
||||
}
|
||||
|
||||
return {
|
||||
"id": reply.id,
|
||||
"updated_at": reply.updated_at
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
def delete_reply(reply_id: str, user_id: str) -> None:
|
||||
"""Delete a comment reply."""
|
||||
reply = db.session.get(WorkflowCommentReply, reply_id)
|
||||
if not reply:
|
||||
raise NotFound("Reply not found")
|
||||
with Session(db.engine, expire_on_commit=False) as session:
|
||||
reply = session.get(WorkflowCommentReply, reply_id)
|
||||
if not reply:
|
||||
raise NotFound("Reply not found")
|
||||
|
||||
# Only the creator can delete the reply
|
||||
if reply.created_by != user_id:
|
||||
raise Forbidden("Only the reply creator can delete it")
|
||||
# Only the creator can delete the reply
|
||||
if reply.created_by != user_id:
|
||||
raise Forbidden("Only the reply creator can delete it")
|
||||
|
||||
db.session.delete(reply)
|
||||
db.session.commit()
|
||||
# Delete associated mentions first
|
||||
mentions = session.scalars(
|
||||
select(WorkflowCommentMention).where(WorkflowCommentMention.reply_id == reply_id)
|
||||
).all()
|
||||
for mention in mentions:
|
||||
session.delete(mention)
|
||||
|
||||
session.delete(reply)
|
||||
session.commit()
|
||||
|
||||
@staticmethod
|
||||
def validate_comment_access(comment_id: str, tenant_id: str, app_id: str) -> WorkflowComment:
|
||||
|
|
|
|||
Loading…
Reference in New Issue