| ) | ) | ||||
| from libs.helper import datetime_string | from libs.helper import datetime_string | ||||
| from libs.login import login_required | from libs.login import login_required | ||||
| from models.model import AppMode, Conversation, Message, MessageAnnotation | |||||
| from models.model import AppMode, Conversation, EndUser, Message, MessageAnnotation | |||||
| class CompletionConversationApi(Resource): | class CompletionConversationApi(Resource): | ||||
| parser.add_argument('limit', type=int_range(1, 100), required=False, default=20, location='args') | parser.add_argument('limit', type=int_range(1, 100), required=False, default=20, location='args') | ||||
| args = parser.parse_args() | args = parser.parse_args() | ||||
| subquery = ( | |||||
| db.session.query( | |||||
| Conversation.id.label('conversation_id'), | |||||
| EndUser.session_id.label('from_end_user_session_id') | |||||
| ) | |||||
| .outerjoin(EndUser, Conversation.from_end_user_id == EndUser.id) | |||||
| .subquery() | |||||
| ) | |||||
| query = db.select(Conversation).where(Conversation.app_id == app_model.id) | query = db.select(Conversation).where(Conversation.app_id == app_model.id) | ||||
| if args['keyword']: | if args['keyword']: | ||||
| keyword_filter = '%{}%'.format(args['keyword']) | |||||
| query = query.join( | query = query.join( | ||||
| Message, Message.conversation_id == Conversation.id | |||||
| Message, Message.conversation_id == Conversation.id, | |||||
| ).join( | |||||
| subquery, subquery.c.conversation_id == Conversation.id | |||||
| ).filter( | ).filter( | ||||
| or_( | or_( | ||||
| Message.query.ilike('%{}%'.format(args['keyword'])), | |||||
| Message.answer.ilike('%{}%'.format(args['keyword'])), | |||||
| Conversation.name.ilike('%{}%'.format(args['keyword'])), | |||||
| Conversation.introduction.ilike('%{}%'.format(args['keyword'])), | |||||
| Message.query.ilike(keyword_filter), | |||||
| Message.answer.ilike(keyword_filter), | |||||
| Conversation.name.ilike(keyword_filter), | |||||
| Conversation.introduction.ilike(keyword_filter), | |||||
| subquery.c.from_end_user_session_id.ilike(keyword_filter) | |||||
| ), | ), | ||||
| ) | ) | ||||
| account = current_user | account = current_user |