| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 | 
							- from flask_restx import fields, marshal_with, reqparse
 - from flask_restx.inputs import int_range
 - from werkzeug.exceptions import NotFound
 - 
 - from controllers.web import web_ns
 - from controllers.web.error import NotCompletionAppError
 - from controllers.web.wraps import WebApiResource
 - from fields.conversation_fields import message_file_fields
 - from libs.helper import TimestampField, uuid_value
 - from services.errors.message import MessageNotExistsError
 - from services.saved_message_service import SavedMessageService
 - 
 - feedback_fields = {"rating": fields.String}
 - 
 - message_fields = {
 -     "id": fields.String,
 -     "inputs": fields.Raw,
 -     "query": fields.String,
 -     "answer": fields.String,
 -     "message_files": fields.List(fields.Nested(message_file_fields)),
 -     "feedback": fields.Nested(feedback_fields, attribute="user_feedback", allow_null=True),
 -     "created_at": TimestampField,
 - }
 - 
 - 
 - @web_ns.route("/saved-messages")
 - class SavedMessageListApi(WebApiResource):
 -     saved_message_infinite_scroll_pagination_fields = {
 -         "limit": fields.Integer,
 -         "has_more": fields.Boolean,
 -         "data": fields.List(fields.Nested(message_fields)),
 -     }
 - 
 -     post_response_fields = {
 -         "result": fields.String,
 -     }
 - 
 -     @web_ns.doc("Get Saved Messages")
 -     @web_ns.doc(description="Retrieve paginated list of saved messages for a completion application.")
 -     @web_ns.doc(
 -         params={
 -             "last_id": {"description": "Last message ID for pagination", "type": "string", "required": False},
 -             "limit": {
 -                 "description": "Number of messages to return (1-100)",
 -                 "type": "integer",
 -                 "required": False,
 -                 "default": 20,
 -             },
 -         }
 -     )
 -     @web_ns.doc(
 -         responses={
 -             200: "Success",
 -             400: "Bad Request - Not a completion app",
 -             401: "Unauthorized",
 -             403: "Forbidden",
 -             404: "App Not Found",
 -             500: "Internal Server Error",
 -         }
 -     )
 -     @marshal_with(saved_message_infinite_scroll_pagination_fields)
 -     def get(self, app_model, end_user):
 -         if app_model.mode != "completion":
 -             raise NotCompletionAppError()
 - 
 -         parser = reqparse.RequestParser()
 -         parser.add_argument("last_id", type=uuid_value, location="args")
 -         parser.add_argument("limit", type=int_range(1, 100), required=False, default=20, location="args")
 -         args = parser.parse_args()
 - 
 -         return SavedMessageService.pagination_by_last_id(app_model, end_user, args["last_id"], args["limit"])
 - 
 -     @web_ns.doc("Save Message")
 -     @web_ns.doc(description="Save a specific message for later reference.")
 -     @web_ns.doc(
 -         params={
 -             "message_id": {"description": "Message UUID to save", "type": "string", "required": True},
 -         }
 -     )
 -     @web_ns.doc(
 -         responses={
 -             200: "Message saved successfully",
 -             400: "Bad Request - Not a completion app",
 -             401: "Unauthorized",
 -             403: "Forbidden",
 -             404: "Message Not Found",
 -             500: "Internal Server Error",
 -         }
 -     )
 -     @marshal_with(post_response_fields)
 -     def post(self, app_model, end_user):
 -         if app_model.mode != "completion":
 -             raise NotCompletionAppError()
 - 
 -         parser = reqparse.RequestParser()
 -         parser.add_argument("message_id", type=uuid_value, required=True, location="json")
 -         args = parser.parse_args()
 - 
 -         try:
 -             SavedMessageService.save(app_model, end_user, args["message_id"])
 -         except MessageNotExistsError:
 -             raise NotFound("Message Not Exists.")
 - 
 -         return {"result": "success"}
 - 
 - 
 - @web_ns.route("/saved-messages/<uuid:message_id>")
 - class SavedMessageApi(WebApiResource):
 -     delete_response_fields = {
 -         "result": fields.String,
 -     }
 - 
 -     @web_ns.doc("Delete Saved Message")
 -     @web_ns.doc(description="Remove a message from saved messages.")
 -     @web_ns.doc(params={"message_id": {"description": "Message UUID to delete", "type": "string", "required": True}})
 -     @web_ns.doc(
 -         responses={
 -             204: "Message removed successfully",
 -             400: "Bad Request - Not a completion app",
 -             401: "Unauthorized",
 -             403: "Forbidden",
 -             404: "Message Not Found",
 -             500: "Internal Server Error",
 -         }
 -     )
 -     @marshal_with(delete_response_fields)
 -     def delete(self, app_model, end_user, message_id):
 -         message_id = str(message_id)
 - 
 -         if app_model.mode != "completion":
 -             raise NotCompletionAppError()
 - 
 -         SavedMessageService.delete(app_model, end_user, message_id)
 - 
 -         return {"result": "success"}, 204
 
 
  |