get_cached_topic_followers-fix
All checks were successful
Deploy on push / deploy (push) Successful in 55s

This commit is contained in:
Untone 2025-02-04 01:40:00 +03:00
parent 747d550d80
commit 40b4703b1a

25
cache/cache.py vendored
View File

@ -158,8 +158,11 @@ async def get_cached_topic_followers(topic_id: int):
Получает подписчиков темы по ID, используя кеш Redis. Получает подписчиков темы по ID, используя кеш Redis.
Если данные отсутствуют в кеше, извлекает из базы данных и кеширует их. Если данные отсутствуют в кеше, извлекает из базы данных и кеширует их.
:param topic_id: Идентификатор темы, подписчиков которой необходимо получить. Args:
:return: Список подписчиков темы, каждый элемент представляет собой словарь с ID и именем автора. topic_id: Идентификатор темы, подписчиков которой необходимо получить.
Returns:
List[dict]: Список подписчиков темы, каждый элемент представляет собой словарь с данными автора.
""" """
try: try:
# Попытка получить данные из кеша # Попытка получить данные из кеша
@ -171,21 +174,21 @@ async def get_cached_topic_followers(topic_id: int):
return followers return followers
# Если данные не найдены в кеше, загрузка из базы данных # Если данные не найдены в кеше, загрузка из базы данных
async with local_session() as session: with local_session() as session:
result = await session.execute( result = session.query(Author.id)\
session.query(Author.id) .join(TopicFollower, TopicFollower.follower == Author.id)\
.join(TopicFollower, TopicFollower.follower == Author.id) .filter(TopicFollower.topic == topic_id)\
.filter(TopicFollower.topic == topic_id) .all()
) followers_ids = [f[0] for f in result]
followers_ids = [f[0] for f in result.scalars().all()]
# Кеширование результатов # Кэширование результатов
await redis_operation("SET", f"topic:followers:{topic_id}", json.dumps(followers_ids)) await redis_operation("SET", f"topic:followers:{topic_id}", json.dumps(followers_ids))
# Получение подробной информации о подписчиках по их ID # Получение подробной информации о подписчиках по их ID
followers = await get_cached_authors_by_ids(followers_ids) followers = await get_cached_authors_by_ids(followers_ids)
logger.debug(followers) logger.debug(f"Topic#{topic_id} followers fetched and cached: {len(followers)} followers found.")
return followers return followers
except Exception as e: except Exception as e:
logger.error(f"Ошибка при получении подписчиков для темы #{topic_id}: {str(e)}") logger.error(f"Ошибка при получении подписчиков для темы #{topic_id}: {str(e)}")
return [] return []