fix(api): resolve "Message not exists" error in admin feedback creation (#23232)
Fix regression introduced in PR #22580 where admin users encountered "Message not exists" errors when creating feedback on messages created by other users. The issue was caused by `MessageService.create_feedback()` incorrectly filtering messages by the current user's ID, preventing admins from accessing messages created by end users. Reverts: #22580
This commit is contained in:
@@ -27,7 +27,7 @@ from fields.conversation_fields import annotation_fields, message_detail_fields
|
|||||||
from libs.helper import uuid_value
|
from libs.helper import uuid_value
|
||||||
from libs.infinite_scroll_pagination import InfiniteScrollPagination
|
from libs.infinite_scroll_pagination import InfiniteScrollPagination
|
||||||
from libs.login import login_required
|
from libs.login import login_required
|
||||||
from models.model import AppMode, Conversation, Message, MessageAnnotation
|
from models.model import AppMode, Conversation, Message, MessageAnnotation, MessageFeedback
|
||||||
from services.annotation_service import AppAnnotationService
|
from services.annotation_service import AppAnnotationService
|
||||||
from services.errors.conversation import ConversationNotExistsError
|
from services.errors.conversation import ConversationNotExistsError
|
||||||
from services.errors.message import MessageNotExistsError, SuggestedQuestionsAfterAnswerDisabledError
|
from services.errors.message import MessageNotExistsError, SuggestedQuestionsAfterAnswerDisabledError
|
||||||
@@ -124,17 +124,34 @@ class MessageFeedbackApi(Resource):
|
|||||||
parser.add_argument("rating", type=str, choices=["like", "dislike", None], location="json")
|
parser.add_argument("rating", type=str, choices=["like", "dislike", None], location="json")
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
try:
|
message_id = str(args["message_id"])
|
||||||
MessageService.create_feedback(
|
|
||||||
app_model=app_model,
|
message = db.session.query(Message).filter(Message.id == message_id, Message.app_id == app_model.id).first()
|
||||||
message_id=str(args["message_id"]),
|
|
||||||
user=current_user,
|
if not message:
|
||||||
rating=args.get("rating"),
|
|
||||||
content=None,
|
|
||||||
)
|
|
||||||
except MessageNotExistsError:
|
|
||||||
raise NotFound("Message Not Exists.")
|
raise NotFound("Message Not Exists.")
|
||||||
|
|
||||||
|
feedback = message.admin_feedback
|
||||||
|
|
||||||
|
if not args["rating"] and feedback:
|
||||||
|
db.session.delete(feedback)
|
||||||
|
elif args["rating"] and feedback:
|
||||||
|
feedback.rating = args["rating"]
|
||||||
|
elif not args["rating"] and not feedback:
|
||||||
|
raise ValueError("rating cannot be None when feedback not exists")
|
||||||
|
else:
|
||||||
|
feedback = MessageFeedback(
|
||||||
|
app_id=app_model.id,
|
||||||
|
conversation_id=message.conversation_id,
|
||||||
|
message_id=message.id,
|
||||||
|
rating=args["rating"],
|
||||||
|
from_source="admin",
|
||||||
|
from_account_id=current_user.id,
|
||||||
|
)
|
||||||
|
db.session.add(feedback)
|
||||||
|
|
||||||
|
db.session.commit()
|
||||||
|
|
||||||
return {"result": "success"}
|
return {"result": "success"}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user