Underground-Digital/Workflow-Engine
0
1from flask_login import current_user2from flask_restful import fields, marshal_with, reqparse3from flask_restful.inputs import int_range4from werkzeug.exceptions import NotFound5 6from controllers.console import api7from controllers.console.explore.error import NotCompletionAppError8from controllers.console.explore.wraps import InstalledAppResource9from fields.conversation_fields import message_file_fields10from libs.helper import TimestampField, uuid_value11from services.errors.message import MessageNotExistsError12from services.saved_message_service import SavedMessageService13 14feedback_fields = {"rating": fields.String}15 16message_fields = {17 "id": fields.String,18 "inputs": fields.Raw,19 "query": fields.String,20 "answer": fields.String,21 "message_files": fields.List(fields.Nested(message_file_fields)),22 "feedback": fields.Nested(feedback_fields, attribute="user_feedback", allow_null=True),23 "created_at": TimestampField,24}25 26 27class SavedMessageListApi(InstalledAppResource):28 saved_message_infinite_scroll_pagination_fields = {29 "limit": fields.Integer,30 "has_more": fields.Boolean,31 "data": fields.List(fields.Nested(message_fields)),32 }33 34 @marshal_with(saved_message_infinite_scroll_pagination_fields)35 def get(self, installed_app):36 app_model = installed_app.app37 if app_model.mode != "completion":38 raise NotCompletionAppError()39 40 parser = reqparse.RequestParser()41 parser.add_argument("last_id", type=uuid_value, location="args")42 parser.add_argument("limit", type=int_range(1, 100), required=False, default=20, location="args")43 args = parser.parse_args()44 45 return SavedMessageService.pagination_by_last_id(app_model, current_user, args["last_id"], args["limit"])46 47 def post(self, installed_app):48 app_model = installed_app.app49 if app_model.mode != "completion":50 raise NotCompletionAppError()51 52 parser = reqparse.RequestParser()53 parser.add_argument("message_id", type=uuid_value, required=True, location="json")54 args = parser.parse_args()55 56 try:57 SavedMessageService.save(app_model, current_user, args["message_id"])58 except MessageNotExistsError:59 raise NotFound("Message Not Exists.")60 61 return {"result": "success"}62 63 64class SavedMessageApi(InstalledAppResource):65 def delete(self, installed_app, message_id):66 app_model = installed_app.app67 68 message_id = str(message_id)69 70 if app_model.mode != "completion":71 raise NotCompletionAppError()72 73 SavedMessageService.delete(app_model, current_user, message_id)74 75 return {"result": "success"}76 77 78api.add_resource(79 SavedMessageListApi,80 "/installed-apps/<uuid:installed_app_id>/saved-messages",81 endpoint="installed_app_saved_messages",82)83api.add_resource(84 SavedMessageApi,85 "/installed-apps/<uuid:installed_app_id>/saved-messages/<uuid:message_id>",86 endpoint="installed_app_saved_message",87)88 