diff --git a/resolvers/stat.py b/resolvers/stat.py index 33cd8cc5..9ae00aea 100644 --- a/resolvers/stat.py +++ b/resolvers/stat.py @@ -1,3 +1,5 @@ +import asyncio + from sqlalchemy import and_, distinct, func, join, select from sqlalchemy.orm import aliased @@ -260,9 +262,12 @@ def author_follows_topics(author_id: int): async def update_author_stat(author_id: int): author_query = select(Author).where(Author.id == author_id) try: - [author_with_stat] = get_with_stat(author_query) - if isinstance(author_with_stat, Author): - author_dict = author_with_stat.dict() - await cache_author(author_dict) + result = get_with_stat(author_query) + if result and len(result) == 1: + author_with_stat = result[0] + if isinstance(author_with_stat, Author): + author_dict = author_with_stat.dict() + # await cache_author(author_dict) + asyncio.create_task(cache_author(author_dict)) except Exception as exc: logger.error(exc, exc_info=True) diff --git a/services/cache.py b/services/cache.py index bb8f435c..1853d195 100644 --- a/services/cache.py +++ b/services/cache.py @@ -1,3 +1,4 @@ +import asyncio import json from typing import List @@ -81,11 +82,12 @@ async def get_cached_author_by_user_id(user_id: str, get_with_stat) -> dict: if not author_id: author_query = select(Author).filter(Author.user == user_id) result = get_with_stat(author_query) - if result: - [author_with_stat] = result - if author_with_stat: - await cache_author(author_with_stat.dict()) + if result and len(result) == 1: + author_with_stat = result[0] + if isinstance(author_with_stat, Author): author_dict = author_with_stat.dict() + # await cache_author(author_dict) + asyncio.create_task(cache_author(author_dict)) else: author_str = await redis.execute("GET", f"author:id:{author_id}") if author_str: diff --git a/services/triggers.py b/services/triggers.py index a9834f0f..c4586d3b 100644 --- a/services/triggers.py +++ b/services/triggers.py @@ -66,9 +66,14 @@ def after_reaction_update(mapper, connection, reaction: Reaction): try: # reaction author author_subquery = select(Author).where(Author.id == reaction.created_by) - [author_with_stat] = get_with_stat(author_subquery) - if isinstance(author_with_stat, Author): - asyncio.create_task(cache_author(author_with_stat.dict())) + + result = get_with_stat(author_subquery) + if result and len(result) == 1: + author_with_stat = result[0] + if isinstance(author_with_stat, Author): + author_dict = author_with_stat.dict() + # await cache_author(author_dict) + asyncio.create_task(cache_author(author_dict)) # reaction repliers replied_author_subquery = ( diff --git a/services/webhook.py b/services/webhook.py index 7cc29820..2e1d32aa 100644 --- a/services/webhook.py +++ b/services/webhook.py @@ -1,3 +1,4 @@ +import asyncio import os import re @@ -50,9 +51,12 @@ class WebhookEndpoint(HTTPEndpoint): session.add(author) session.commit() author_query = select(Author).filter(Author.user == user_id) - [author_with_stat] = get_with_stat(author_query) - if author_with_stat: - await cache_author(author_with_stat) + result = get_with_stat(author_query) + if result and len(result) == 1: + author_with_stat = result[0] + author_dict = author_with_stat.dict() + # await cache_author(author_with_stat) + asyncio.create_task(cache_author(author_dict)) return JSONResponse({"status": "success"}) except HTTPException as e: