Добавил возможность ответа на сообщение в вебсокете

This commit is contained in:
urec56 2024-03-18 19:26:13 +03:00
parent 7e26ebb340
commit d79d81a661
2 changed files with 21 additions and 2 deletions

View file

@ -124,6 +124,22 @@ class ChatDAO(BaseDAO):
await session.commit()
return True
@staticmethod
async def add_answer(message_id: int, answer_id: int) -> list[dict]:
answer = (insert(Answers).values(message_id=message_id, answer_id=answer_id)
.returning(Answers.answer_id, Answers.message_id).cte("answer"))
query = (select(Messages.id, Messages.message, Messages.image_url,
Messages.chat_id, Messages.user_id, Messages.created_at,
Users.avatar_image, Users.username, Users.avatar_hex, answer.c.answer_id, answer.c.message_id)
.select_from(Messages)
.join(Users, Users.id == Messages.user_id)
.join(answer, answer.c.answer_id == Messages.id, isouter=True)
.where(Messages.id == answer_id))
async with async_session_maker() as session:
result = await session.execute(query)
await session.commit()
return result.mappings().all()
@staticmethod
async def delete_chat(chat_id: int) -> bool:
query = update(Chats).where(Chats.id == chat_id).values(visibility=False)

View file

@ -25,7 +25,8 @@ class ConnectionManager(WebSocket):
if message['flag'] == 'send':
new_message = await self.add_message_to_database(
user_id=user_id, chat_id=chat_id, message=message['message'], image_url=message['image_url']
user_id=user_id, chat_id=chat_id, message=message['message'],
image_url=message['image_url'], answer=message["answer"]
)
new_message = dict(new_message)
new_message['created_at'] = new_message['created_at'].isoformat()
@ -48,8 +49,10 @@ class ConnectionManager(WebSocket):
await websocket.send_json(new_message)
@staticmethod
async def add_message_to_database(user_id: int, chat_id: int, message: str, image_url: str) -> dict:
async def add_message_to_database(user_id: int, chat_id: int, message: str, image_url: str, answer: int | None) -> dict:
new_message = await ChatDAO.send_message(user_id=user_id, chat_id=chat_id, message=message, image_url=image_url)
if answer:
new_message = await ChatDAO.add_answer(message_id=answer, answer_id=new_message[0]["id"])
return new_message[0]
@staticmethod