From c6ba90552d608763b5199adabbcce521319b7a59 Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 23 Jan 2026 00:38:15 +0300 Subject: [PATCH] some fixes --- database/async_db.py | 20 ++++-- database/repositories/post_repository.py | 81 +++++++++++++++++++----- 2 files changed, 79 insertions(+), 22 deletions(-) diff --git a/database/async_db.py b/database/async_db.py index e9494f3..4f67ec1 100644 --- a/database/async_db.py +++ b/database/async_db.py @@ -142,10 +142,18 @@ class AsyncBotDB: async def get_post_content_from_telegram_by_last_id(self, last_post_id: int) -> List[Tuple[str, str]]: """Получает контент поста по helper_text_message_id.""" return await self.factory.posts.get_post_content_by_helper_id(last_post_id) + + async def get_post_content_by_helper_id(self, helper_message_id: int) -> List[Tuple[str, str]]: + """Алиас для get_post_content_from_telegram_by_last_id (используется callback-сервисом).""" + return await self.get_post_content_from_telegram_by_last_id(helper_message_id) async def get_post_text_from_telegram_by_last_id(self, last_post_id: int) -> Optional[str]: """Получает текст поста по helper_text_message_id.""" return await self.factory.posts.get_post_text_by_helper_id(last_post_id) + + async def get_post_text_by_helper_id(self, helper_message_id: int) -> Optional[str]: + """Алиас для get_post_text_from_telegram_by_last_id (используется callback-сервисом).""" + return await self.get_post_text_from_telegram_by_last_id(helper_message_id) async def get_post_ids_from_telegram_by_last_id(self, last_post_id: int) -> List[int]: """Получает ID сообщений по helper_text_message_id.""" @@ -159,15 +167,15 @@ class AsyncBotDB: """Получает ID автора по helper_text_message_id.""" return await self.factory.posts.get_author_id_by_helper_message_id(helper_text_message_id) - async def update_status_by_message_id(self, message_id: int, status: str) -> None: - """Обновление статуса поста по message_id (одиночные посты).""" - await self.factory.posts.update_status_by_message_id(message_id, status) + async def update_status_by_message_id(self, message_id: int, status: str) -> int: + """Обновление статуса поста по message_id (одиночные посты). Возвращает число обновлённых строк.""" + return await self.factory.posts.update_status_by_message_id(message_id, status) async def update_status_for_media_group_by_helper_id( self, helper_message_id: int, status: str - ) -> None: - """Обновление статуса постов медиагруппы по helper_message_id.""" - await self.factory.posts.update_status_for_media_group_by_helper_id( + ) -> int: + """Обновление статуса постов медиагруппы по helper_message_id. Возвращает число обновлённых строк.""" + return await self.factory.posts.update_status_for_media_group_by_helper_id( helper_message_id, status ) diff --git a/database/repositories/post_repository.py b/database/repositories/post_repository.py index 4c730f6..0160e69 100644 --- a/database/repositories/post_repository.py +++ b/database/repositories/post_repository.py @@ -68,25 +68,74 @@ class PostRepository(DatabaseConnection): query = "UPDATE post_from_telegram_suggest SET helper_text_message_id = ? WHERE message_id = ?" await self._execute_query(query, (helper_message_id, message_id)) - async def update_status_by_message_id(self, message_id: int, status: str) -> None: - """Обновление статуса поста по message_id (одиночные посты).""" - query = "UPDATE post_from_telegram_suggest SET status = ? WHERE message_id = ?" - await self._execute_query(query, (status, message_id)) - self.logger.info(f"Статус поста message_id={message_id} обновлён на {status}") + async def update_status_by_message_id(self, message_id: int, status: str) -> int: + """Обновление статуса поста по message_id (одиночные посты). Возвращает число обновлённых строк.""" + conn = None + try: + conn = await self._get_connection() + await conn.execute( + "UPDATE post_from_telegram_suggest SET status = ? WHERE message_id = ?", + (status, message_id), + ) + cur = await conn.execute("SELECT changes()") + row = await cur.fetchone() + n = row[0] if row else 0 + await conn.commit() + if n == 0: + self.logger.warning( + f"update_status_by_message_id: 0 строк обновлено для message_id={message_id}, status={status}" + ) + else: + self.logger.info(f"Статус поста message_id={message_id} обновлён на {status}") + return n + except Exception as e: + if conn: + await conn.rollback() + self.logger.error(f"Ошибка при обновлении статуса message_id={message_id}: {e}") + raise + finally: + if conn: + await conn.close() async def update_status_for_media_group_by_helper_id( self, helper_message_id: int, status: str - ) -> None: - """Обновление статуса постов медиагруппы по helper_text_message_id.""" - query = """ - UPDATE post_from_telegram_suggest - SET status = ? - WHERE message_id = ? OR helper_text_message_id = ? - """ - await self._execute_query(query, (status, helper_message_id, helper_message_id)) - self.logger.info( - f"Статус медиагруппы helper_message_id={helper_message_id} обновлён на {status}" - ) + ) -> int: + """Обновление статуса постов медиагруппы по helper_text_message_id. Возвращает число обновлённых строк.""" + conn = None + try: + conn = await self._get_connection() + await conn.execute( + """ + UPDATE post_from_telegram_suggest + SET status = ? + WHERE message_id = ? OR helper_text_message_id = ? + """, + (status, helper_message_id, helper_message_id), + ) + cur = await conn.execute("SELECT changes()") + row = await cur.fetchone() + n = row[0] if row else 0 + await conn.commit() + if n == 0: + self.logger.warning( + f"update_status_for_media_group_by_helper_id: 0 строк обновлено " + f"для helper_message_id={helper_message_id}, status={status}" + ) + else: + self.logger.info( + f"Статус медиагруппы helper_message_id={helper_message_id} обновлён на {status}" + ) + return n + except Exception as e: + if conn: + await conn.rollback() + self.logger.error( + f"Ошибка при обновлении статуса медиагруппы helper_message_id={helper_message_id}: {e}" + ) + raise + finally: + if conn: + await conn.close() async def add_post_content(self, post_id: int, message_id: int, content_name: str, content_type: str) -> bool: """Добавление контента поста."""