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

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 def get_pinned_chats(user: SUser = Depends(check_verificated_user_with_exc), uow=Depends(UnitOfWork)):
async with uow: 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( @router.get(

View file

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

View file

@ -13,6 +13,13 @@ from app.users.schemas import SUser
class ConnectionManager: class ConnectionManager:
def __init__(self): def __init__(self):
self.active_connections: dict[int, list[WebSocket]] = {} 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): async def connect(self, chat_id: int, websocket: WebSocket):
await websocket.accept() await websocket.accept()
@ -24,60 +31,65 @@ class ConnectionManager:
self.active_connections[chat_id].remove(websocket) self.active_connections[chat_id].remove(websocket)
async def broadcast(self, uow: UnitOfWork, user_id: int, chat_id: int, message: dict): 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 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) 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 = 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 = new_message.model_dump()
new_message["created_at"] = new_message["created_at"].isoformat() new_message["created_at"] = new_message["created_at"].isoformat()
new_message["flag"] = "send" 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) message = SDeleteMessage.model_validate(message)
if message.user_id != user_id: if message.user_id != user_id:
raise UserDontHavePermissionException raise UserDontHavePermissionException
deleted_message = await self.delete_message(uow=uow, message_id=message.id) deleted_message = await self.delete_message(uow=uow, message_id=message.id)
new_message = {"deleted_message": deleted_message, "id": message.id, "flag": "delete"} 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) message = SEditMessage.model_validate(message)
if message.user_id != user_id: if message.user_id != user_id:
raise UserDontHavePermissionException raise UserDontHavePermissionException
edited_message = await self.edit_message( edited_message = await self.edit_message(
uow=uow, message_id=message.id, new_message=message.new_message, image_url=message.new_image_url uow=uow, message_id=message.id, new_message=message.new_message, image_url=message.new_image_url
) )
new_message = { new_message = {
"flag": "edit", "flag": "edit",
"id": message.id, "id": message.id,
"edited_message": edited_message, "edited_message": edited_message,
"new_message": message.new_message, "new_message": message.new_message,
"new_image_url": message.new_image_url, "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) 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(
new_message = pinned_message.model_dump() uow=uow, chat_id=chat_id, user_id=message.user_id, message_id=message.id
new_message["created_at"] = new_message["created_at"].isoformat() )
new_message["flag"] = "pin" 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) message = SUnpinMessage.model_validate(message)
unpinned_message = await self.unpin_message(uow=uow, chat_id=chat_id, message_id=message.id) unpinned_message = await self.unpin_message(uow=uow, chat_id=chat_id, message_id=message.id)
new_message = {"flag": "pin", "id": unpinned_message} new_message = {"flag": "unpin", "id": unpinned_message}
return new_message
else:
raise IncorrectDataException
for websocket in self.active_connections[chat_id]:
await websocket.send_json(new_message)
@staticmethod @staticmethod
async def add_message_to_database(uow: UnitOfWork, user_id: int, chat_id: int, message: SSendMessage) -> SMessage: async def add_message_to_database(uow: UnitOfWork, user_id: int, chat_id: int, message: SSendMessage) -> SMessage: