Добавлены новые методы для получения статистики постов пользователей, информации о последних постах и количестве банов. Обновлены запросы в репозиториях для сортировки пользователей по дате бана. Исправлены вызовы функций форматирования сообщений для администраторов. Обновлены тесты для проверки новых функциональностей.
This commit is contained in:
@@ -545,3 +545,67 @@ class PostRepository(DatabaseConnection):
|
||||
texts = [row[0] for row in rows if row[0]]
|
||||
self.logger.info(f"Получено {len(texts)} отклоненных постов для обучения")
|
||||
return texts
|
||||
|
||||
async def get_user_posts_stats(self, user_id: int) -> Tuple[int, int, int]:
|
||||
"""
|
||||
Получает статистику постов пользователя.
|
||||
|
||||
Args:
|
||||
user_id: ID пользователя
|
||||
|
||||
Returns:
|
||||
Tuple (approved_count, declined_count, suggest_count)
|
||||
"""
|
||||
query = """
|
||||
SELECT
|
||||
SUM(CASE WHEN status = 'approved' THEN 1 ELSE 0 END) as approved,
|
||||
SUM(CASE WHEN status = 'declined' THEN 1 ELSE 0 END) as declined,
|
||||
SUM(CASE WHEN status = 'suggest' THEN 1 ELSE 0 END) as suggest
|
||||
FROM post_from_telegram_suggest
|
||||
WHERE author_id = ? AND text != '^'
|
||||
"""
|
||||
rows = await self._execute_query_with_result(query, (user_id,))
|
||||
row = rows[0] if rows else None
|
||||
|
||||
if row:
|
||||
approved = row[0] or 0
|
||||
declined = row[1] or 0
|
||||
suggest = row[2] or 0
|
||||
self.logger.info(
|
||||
f"Статистика постов для user_id={user_id}: "
|
||||
f"approved={approved}, declined={declined}, suggest={suggest}"
|
||||
)
|
||||
return (approved, declined, suggest)
|
||||
|
||||
return (0, 0, 0)
|
||||
|
||||
async def get_last_post_by_author(self, user_id: int) -> Optional[str]:
|
||||
"""
|
||||
Получает текст последнего поста пользователя.
|
||||
|
||||
Args:
|
||||
user_id: ID пользователя
|
||||
|
||||
Returns:
|
||||
Текст последнего поста или None, если постов нет
|
||||
"""
|
||||
query = """
|
||||
SELECT text FROM post_from_telegram_suggest
|
||||
WHERE author_id = ? AND text IS NOT NULL AND text != '' AND text != '^'
|
||||
ORDER BY created_at DESC
|
||||
LIMIT 1
|
||||
"""
|
||||
rows = await self._execute_query_with_result(query, (user_id,))
|
||||
row = rows[0] if rows else None
|
||||
|
||||
if row:
|
||||
text = row[0]
|
||||
self.logger.info(
|
||||
f"Последний пост для user_id={user_id}: '{text[:50]}...'"
|
||||
if len(text) > 50
|
||||
else f"Последний пост для user_id={user_id}: '{text}'"
|
||||
)
|
||||
return text
|
||||
|
||||
self.logger.info(f"Постов для user_id={user_id} не найдено")
|
||||
return None
|
||||
|
||||
Reference in New Issue
Block a user