from app.chat.shemas import SMessage, SSendMessage from app.unit_of_work import UnitOfWork class MessageService: @staticmethod async def send_message( uow: UnitOfWork, user_id: int, chat_id: int, message: SSendMessage, image_url: str | None = None ) -> SMessage: async with uow: message_id = await uow.chat.send_message( user_id=user_id, chat_id=chat_id, message=message.message, image_url=image_url ) if message.answer: await uow.chat.add_answer(self_id=message_id, answer_id=message.answer) new_message = await uow.chat.get_message_by_id(message_id) await uow.commit() return new_message @staticmethod async def delete_message(uow: UnitOfWork, message_id: int) -> None: async with uow: await uow.chat.delete_message(message_id=message_id) await uow.commit() @staticmethod async def edit_message(uow: UnitOfWork, message_id: int, new_message: str, new_image_url: str) -> None: async with uow: await uow.chat.edit_message( message_id=message_id, new_message=new_message, new_image_url=new_image_url ) await uow.commit() @staticmethod async def pin_message(uow: UnitOfWork, chat_id: int, user_id: int, message_id: int) -> SMessage: async with uow: await uow.chat.pin_message(chat_id=chat_id, message_id=message_id, user_id=user_id) pinned_message = await uow.chat.get_message_by_id(message_id) await uow.commit() return pinned_message @staticmethod async def unpin_message(uow: UnitOfWork, chat_id: int, message_id: int) -> None: async with uow: await uow.chat.unpin_message(chat_id=chat_id, message_id=message_id) await uow.commit()