saved_message.py 2.8 KB

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