Изменение моделей

This commit is contained in:
urec56 2024-06-05 15:35:51 +05:00
parent 5c7624cd71
commit cf76cccc66
3 changed files with 57 additions and 45 deletions

View file

@ -211,7 +211,7 @@ async def unpinn_chat(chat_id: int, user: SUser = Depends(check_verificated_user
)
async def get_pinned_chats(user: SUser = Depends(check_verificated_user_with_exc), uow=Depends(UnitOfWork)):
async with uow:
return await uow.chat.get_pinned_chats(user_id=user.id)
return {"pinned_chats": await uow.chat.get_pinned_chats(user_id=user.id)}
@router.get(

View file

@ -52,7 +52,7 @@ class SAllowedChats(BaseModel):
class SPinnedChats(BaseModel):
pinned_chat: list[SChat]
pinned_chats: list[SChat]
class SPinnedMessages(BaseModel):

View file

@ -13,6 +13,13 @@ from app.users.schemas import SUser
class ConnectionManager:
def __init__(self):
self.active_connections: dict[int, list[WebSocket]] = {}
self.message_methods = {
"send": self.send,
"delete": self.delete,
"edit": self.edit,
"pin": self.pin,
"unpin": self.unpin,
}
async def connect(self, chat_id: int, websocket: WebSocket):
await websocket.accept()
@ -24,18 +31,23 @@ class ConnectionManager:
self.active_connections[chat_id].remove(websocket)
async def broadcast(self, uow: UnitOfWork, user_id: int, chat_id: int, message: dict):
if "flag" not in message:
try:
new_message = await self.message_methods[message["flag"]](uow, user_id, chat_id, message)
for websocket in self.active_connections[chat_id]:
await websocket.send_json(new_message)
except KeyError:
raise IncorrectDataException
if message["flag"] == "send":
async def send(self, uow: UnitOfWork, user_id: int, chat_id: int, message: dict) -> dict:
message = SSendMessage.model_validate(message)
new_message = await self.add_message_to_database(uow=uow, user_id=user_id, chat_id=chat_id, message=message)
new_message = new_message.model_dump()
new_message["created_at"] = new_message["created_at"].isoformat()
new_message["flag"] = "send"
return new_message
elif message["flag"] == "delete":
async def delete(self, uow: UnitOfWork, user_id: int, _: int, message: dict) -> dict:
message = SDeleteMessage.model_validate(message)
if message.user_id != user_id:
@ -43,8 +55,9 @@ class ConnectionManager:
deleted_message = await self.delete_message(uow=uow, message_id=message.id)
new_message = {"deleted_message": deleted_message, "id": message.id, "flag": "delete"}
return new_message
elif message["flag"] == "edit":
async def edit(self, uow: UnitOfWork, user_id: int, _: int, message: dict) -> dict:
message = SEditMessage.model_validate(message)
if message.user_id != user_id:
@ -60,24 +73,23 @@ class ConnectionManager:
"new_message": message.new_message,
"new_image_url": message.new_image_url,
}
return new_message
elif message["flag"] == "pin":
async def pin(self, uow: UnitOfWork, _: int, chat_id: int, message: dict) -> dict:
message = SPinMessage.model_validate(message)
pinned_message = await self.pin_message(uow=uow, chat_id=chat_id, user_id=message.user_id, message_id=message.id)
pinned_message = await self.pin_message(
uow=uow, chat_id=chat_id, user_id=message.user_id, message_id=message.id
)
new_message = pinned_message.model_dump()
new_message["created_at"] = new_message["created_at"].isoformat()
new_message["flag"] = "pin"
return new_message
elif message["flag"] == "unpin":
async def unpin(self, uow: UnitOfWork, _: int, chat_id: int, message: dict) -> dict:
message = SUnpinMessage.model_validate(message)
unpinned_message = await self.unpin_message(uow=uow, chat_id=chat_id, message_id=message.id)
new_message = {"flag": "pin", "id": unpinned_message}
else:
raise IncorrectDataException
for websocket in self.active_connections[chat_id]:
await websocket.send_json(new_message)
new_message = {"flag": "unpin", "id": unpinned_message}
return new_message
@staticmethod
async def add_message_to_database(uow: UnitOfWork, user_id: int, chat_id: int, message: SSendMessage) -> SMessage: