saved_message.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. from flask_login import current_user
  2. from flask_restful import fields, marshal_with, reqparse
  3. from flask_restful.inputs import int_range
  4. from werkzeug.exceptions import NotFound
  5. from controllers.console import api
  6. from controllers.console.explore.error import NotCompletionAppError
  7. from controllers.console.explore.wraps import InstalledAppResource
  8. from fields.conversation_fields import message_file_fields
  9. from libs.helper import TimestampField, uuid_value
  10. from services.errors.message import MessageNotExistsError
  11. from services.saved_message_service import SavedMessageService
  12. feedback_fields = {
  13. 'rating': fields.String
  14. }
  15. message_fields = {
  16. 'id': fields.String,
  17. 'inputs': fields.Raw,
  18. 'query': fields.String,
  19. 'answer': fields.String,
  20. 'message_files': fields.List(fields.Nested(message_file_fields), attribute='files'),
  21. 'feedback': fields.Nested(feedback_fields, attribute='user_feedback', allow_null=True),
  22. 'created_at': TimestampField
  23. }
  24. class SavedMessageListApi(InstalledAppResource):
  25. saved_message_infinite_scroll_pagination_fields = {
  26. 'limit': fields.Integer,
  27. 'has_more': fields.Boolean,
  28. 'data': fields.List(fields.Nested(message_fields))
  29. }
  30. @marshal_with(saved_message_infinite_scroll_pagination_fields)
  31. def get(self, installed_app):
  32. app_model = installed_app.app
  33. if app_model.mode != 'completion':
  34. raise NotCompletionAppError()
  35. parser = reqparse.RequestParser()
  36. parser.add_argument('last_id', type=uuid_value, location='args')
  37. parser.add_argument('limit', type=int_range(1, 100), required=False, default=20, location='args')
  38. args = parser.parse_args()
  39. return SavedMessageService.pagination_by_last_id(app_model, current_user, args['last_id'], args['limit'])
  40. def post(self, installed_app):
  41. app_model = installed_app.app
  42. if app_model.mode != 'completion':
  43. raise NotCompletionAppError()
  44. parser = reqparse.RequestParser()
  45. parser.add_argument('message_id', type=uuid_value, required=True, location='json')
  46. args = parser.parse_args()
  47. try:
  48. SavedMessageService.save(app_model, current_user, args['message_id'])
  49. except MessageNotExistsError:
  50. raise NotFound("Message Not Exists.")
  51. return {'result': 'success'}
  52. class SavedMessageApi(InstalledAppResource):
  53. def delete(self, installed_app, message_id):
  54. app_model = installed_app.app
  55. message_id = str(message_id)
  56. if app_model.mode != 'completion':
  57. raise NotCompletionAppError()
  58. SavedMessageService.delete(app_model, current_user, message_id)
  59. return {'result': 'success'}
  60. api.add_resource(SavedMessageListApi, '/installed-apps/<uuid:installed_app_id>/saved-messages', endpoint='installed_app_saved_messages')
  61. api.add_resource(SavedMessageApi, '/installed-apps/<uuid:installed_app_id>/saved-messages/<uuid:message_id>', endpoint='installed_app_saved_message')