diff --git a/cache/cache.py b/cache/cache.py index ef535d5c..1fab2140 100644 --- a/cache/cache.py +++ b/cache/cache.py @@ -310,13 +310,11 @@ async def get_cached_author_by_id(author_id: int, get_with_stat): Returns: dict: Dictionary with author data or None if not found. """ - # Attempt to find author ID by author_id in Redis cache - author_id = await redis.execute("GET", f"author:id:{author_id}") - if author_id: - # If ID is found, get full author data by ID - author_data = await redis.execute("GET", f"author:id:{author_id}") - if author_data: - return orjson.loads(author_data) + # Attempt to find author data by author_id in Redis cache + cached_author_data = await redis.execute("GET", f"author:id:{author_id}") + if cached_author_data: + # If data is found, return parsed JSON + return orjson.loads(cached_author_data) # If data is not found in cache, query the database author_query = select(Author).where(Author.id == author_id) diff --git a/resolvers/stat.py b/resolvers/stat.py index c8bb448a..6014627d 100644 --- a/resolvers/stat.py +++ b/resolvers/stat.py @@ -243,7 +243,7 @@ def get_author_followers_stat(author_id: int) -> int: return result[0] if result else 0 -def get_author_comments_stat(author_id): +def get_author_comments_stat(author_id: int): q = ( select(func.coalesce(func.count(Reaction.id), 0).label("comments_count")) .select_from(Author) @@ -289,10 +289,28 @@ def get_with_stat(q): stat["shouts"] = cols[1] # Статистика по публикациям stat["followers"] = cols[2] # Статистика по подписчикам if is_author: - stat["authors"] = get_author_authors_stat(entity.id) # Статистика по подпискам на авторов - stat["comments"] = get_author_comments_stat(entity.id) # Статистика по комментариям + # Дополнительная проверка типа entity.id + if not hasattr(entity, 'id'): + logger.error(f"Entity does not have id attribute: {entity}") + continue + entity_id = entity.id + if not isinstance(entity_id, int): + logger.error(f"Entity id is not integer: {entity_id} (type: {type(entity_id)})") + continue + + stat["authors"] = get_author_authors_stat(entity_id) # Статистика по подпискам на авторов + stat["comments"] = get_author_comments_stat(entity_id) # Статистика по комментариям else: - stat["authors"] = get_topic_authors_stat(entity.id) # Статистика по авторам темы + # Дополнительная проверка типа entity.id для тем + if not hasattr(entity, 'id'): + logger.error(f"Entity does not have id attribute: {entity}") + continue + entity_id = entity.id + if not isinstance(entity_id, int): + logger.error(f"Entity id is not integer: {entity_id} (type: {type(entity_id)})") + continue + + stat["authors"] = get_topic_authors_stat(entity_id) # Статистика по авторам темы entity.stat = stat records.append(entity) except Exception as exc: