Skip to content

Commit

Permalink
Merge pull request #32 from jamakase/feature/backend-api
Browse files Browse the repository at this point in the history
update get_message, update swagger
  • Loading branch information
anntish authored Sep 9, 2024
2 parents 8041ab5 + e5ceb9c commit 9e4aaa0
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 52 deletions.
3 changes: 3 additions & 0 deletions services/backend/routes/message/get_message.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
import traceback
from flask import jsonify, Blueprint
from services.message_service import MessageService
from flasgger import swag_from
from schemas.get_message_schema import get_message_swagger, CheckTaskResultSchema


api = Blueprint('api', __name__)

@api.route('/messages/<conversation_id>', methods=['GET'])
@swag_from(get_message_swagger)
def get_user_messages(conversation_id):
try:
result = MessageService.get_message(conversation_id)
Expand Down
106 changes: 57 additions & 49 deletions services/backend/schemas/get_message_schema.py
Original file line number Diff line number Diff line change
@@ -1,60 +1,55 @@
from marshmallow import Schema, fields


class MessageSchema(Schema):
task_id = fields.Str(required=True)
id = fields.Int(required=True)
role = fields.Str(required=True)
text = fields.Str(required=True)
class CheckTaskResultSchema(Schema):
task_id = fields.Str(allow_none=True, description="ID задачи")
id = fields.Int(allow_none=True, description="ID сообщения в таблице messages")
role = fields.Str(allow_none=True, description="Роль отправителя сообщения (1 - система, 2 - пользователь)")
text = fields.Str(allow_none=True, description="Текст сообщения")


messages_swagger = {
'tags': ['Messages'],
'description': 'Получить все беседы для указанного пользователя, включая сообщения бесед',
get_message_swagger = {
'tags': ['Message'],
'description': 'Получить сообщения беседы по ID беседы',
'parameters': [
{
'name': 'user_id',
'type': 'string',
'name': 'conversation_id',
'in': 'path', # Указано, что параметр передается в URL как часть пути
'required': True,
'description': 'ID пользователя для получения сообщений'
'description': 'ID беседы, для которой нужно получить сообщения',
'schema': {
'type': 'integer'
}
}
],
'responses': {
'200': {
'description': 'Список сообщений, сгруппированных по conversation_id',
'schema': {
'type': 'object',
'properties': {
'messages': {
'type': 'array',
'items': {
'type': 'object',
'properties': {
'conversation_id': {
'type': 'integer',
'description': 'ID беседы'
},
'messages': {
'type': 'array',
'items': {
'type': 'object',
'properties': {
'task_id': {
'type': 'string',
'description': 'ID задачи'
},
'id': {
'type': 'integer',
'description': 'ID сообщения'
},
'role': {
'type': 'string',
'description': 'Роль отправителя сообщения (1 - "system", 2 - "user")'
},
'text': {
'type': 'string',
'description': 'Текст сообщения'
}
200: {
'description': 'Сообщения в беседе',
'content': {
'application/json': {
'schema': {
'type': 'object',
'properties': {
'messages': {
'type': 'array',
'items': {
'type': 'object',
'properties': {
'task_id': {
'type': 'string',
'description': 'ID задачи'
},
'id': {
'type': 'integer',
'description': 'ID сообщения в таблице messages'
},
'role': {
'type': 'string',
'description': 'Роль отправителя сообщения (1 - система, 2 - пользователь)'
},
'text': {
'type': 'string',
'description': 'Текст сообщения'
}
}
}
Expand All @@ -64,8 +59,21 @@ class MessageSchema(Schema):
}
}
},
'404': {
'description': 'Не найдены беседы или сообщения для указанного пользователя'
404: {
'description': 'ID беседы не найдено',
'content': {
'application/json': {
'schema': {
'type': 'object',
'properties': {
'error': {
'type': 'string',
'description': 'Описание ошибки'
}
}
}
}
}
}
}
}
}
9 changes: 6 additions & 3 deletions services/backend/services/message_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,13 @@ def delete_message(conversation_id):
@staticmethod
def get_message(conversation_id):
messages = MessageModel.query.filter(MessageModel.conversation_id.in_([conversation_id])).all()
print("CONV_ID:", conversation_id)
if not messages:
return jsonify({'error': 'No messages found for these conversations'}), 404

if not messages:
return {
'messages': [
{conversation_id: [{'task_id': None, 'id': None, 'role': None, 'text': None}]}
]
}, 200

grouped_messages = defaultdict(list)
for message in messages:
Expand Down

0 comments on commit 9e4aaa0

Please sign in to comment.