Underground-Digital/Workflow-Engine
0
1from flask_restful import fields, marshal_with, reqparse2from flask_restful.inputs import int_range3from werkzeug.exceptions import NotFound4 5from controllers.web import api6from controllers.web.error import NotCompletionAppError7from controllers.web.wraps import WebApiResource8from fields.conversation_fields import message_file_fields9from libs.helper import TimestampField, uuid_value10from services.errors.message import MessageNotExistsError11from services.saved_message_service import SavedMessageService12 13feedback_fields = {"rating": fields.String}14 15message_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)),21 "feedback": fields.Nested(feedback_fields, attribute="user_feedback", allow_null=True),22 "created_at": TimestampField,23}24 25 26class SavedMessageListApi(WebApiResource):27 saved_message_infinite_scroll_pagination_fields = {28 "limit": fields.Integer,29 "has_more": fields.Boolean,30 "data": fields.List(fields.Nested(message_fields)),31 }32 33 @marshal_with(saved_message_infinite_scroll_pagination_fields)34 def get(self, app_model, end_user):35 if app_model.mode != "completion":36 raise NotCompletionAppError()37 38 parser = reqparse.RequestParser()39 parser.add_argument("last_id", type=uuid_value, location="args")40 parser.add_argument("limit", type=int_range(1, 100), required=False, default=20, location="args")41 args = parser.parse_args()42 43 return SavedMessageService.pagination_by_last_id(app_model, end_user, args["last_id"], args["limit"])44 45 def post(self, app_model, end_user):46 if app_model.mode != "completion":47 raise NotCompletionAppError()48 49 parser = reqparse.RequestParser()50 parser.add_argument("message_id", type=uuid_value, required=True, location="json")51 args = parser.parse_args()52 53 try:54 SavedMessageService.save(app_model, end_user, args["message_id"])55 except MessageNotExistsError:56 raise NotFound("Message Not Exists.")57 58 return {"result": "success"}59 60 61class SavedMessageApi(WebApiResource):62 def delete(self, app_model, end_user, message_id):63 message_id = str(message_id)64 65 if app_model.mode != "completion":66 raise NotCompletionAppError()67 68 SavedMessageService.delete(app_model, end_user, message_id)69 70 return {"result": "success"}71 72 73api.add_resource(SavedMessageListApi, "/saved-messages")74api.add_resource(SavedMessageApi, "/saved-messages/<uuid:message_id>")75 