| import asyncio | |
| from fastapi import HTTPException | |
| from bson import ObjectId | |
| from cbh.api.chat.model import ChatModel | |
| from cbh.api.message.model import MessageModel | |
| from cbh.api.message.schemas import CreateMessageRequest | |
| from cbh.core.config import settings | |
| async def get_all_chat_messages_obj(chat_id: str) -> tuple[list[MessageModel], ChatModel]: | |
| messages, chat = await asyncio.gather( | |
| settings.DB_CLIENT.messages.find({"chatId": chat_id}).to_list(length=None), | |
| settings.DB_CLIENT.chats.find_one({"_id": ObjectId(chat_id)}) | |
| ) | |
| messages = [MessageModel.from_mongo(message) for message in messages] | |
| if not chat: | |
| raise HTTPException(status_code=404, detail="Chat not found") | |
| return messages, ChatModel.from_mongo(chat) | |
| async def create_message_obj(chat_id: str, message: CreateMessageRequest) -> MessageModel: | |
| chat = await settings.DB_CLIENT.chats.find_one({"_id": ObjectId(chat_id)}) | |
| if not chat: | |
| raise HTTPException(status_code=404, detail="Chat not found") | |
| message = MessageModel(chatId=chat_id, | |
| author=message.author, | |
| text=message.text, | |
| moduleResponse=message.moduleResponse) | |
| await settings.DB_CLIENT.messages.insert_one(message.to_mongo()) | |
| return message | |