Добавил возможность ответа на сообщение в вебсокете
This commit is contained in:
parent
7e26ebb340
commit
d79d81a661
2 changed files with 21 additions and 2 deletions
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue