diff --git a/resolvers/chats.py b/resolvers/chats.py index 250c3cd..761e596 100644 --- a/resolvers/chats.py +++ b/resolvers/chats.py @@ -4,7 +4,7 @@ import uuid from models.chat import Chat, ChatUpdate from services.auth import login_required -from services.core import get_all_authors +from services.core import cached_authors from services.presence import notify_chat from services.rediscache import redis from services.schema import mutation @@ -51,7 +51,7 @@ async def update_chat(_, info, chat_new: ChatUpdate): async def create_chat(_, info, title="", members=None): members = members or [] user_id = info.context["user_id"] - authors_by_user, authors_by_id = get_all_authors() + authors_by_user, authors_by_id = cached_authors author = authors_by_user[user_id] author_id = author["id"] chat = None diff --git a/resolvers/load.py b/resolvers/load.py index 4577a87..529487f 100644 --- a/resolvers/load.py +++ b/resolvers/load.py @@ -6,7 +6,7 @@ from models.chat import ChatPayload, Message from models.member import ChatMember from resolvers.chats import create_chat from services.auth import login_required -from services.core import get_all_authors, get_my_followed +from services.core import cached_authors, get_my_followed from services.rediscache import redis from services.schema import query @@ -65,7 +65,7 @@ async def load_chats(_, info, limit: int = 50, offset: int = 0) -> Dict[str, Uni r = await create_chat(None, info, members=[1]) # member with id = 1 is discours print(f"[resolvers.load] created chat: {r['chat_id']}") cids.append(r["chat"]["id"]) - authors_by_user, authors_by_id = get_all_authors() + authors_by_user, authors_by_id = cached_authors for cid in cids: async with lock: chat_str: str = await redis.execute("GET", f"chats/{cid}") @@ -119,7 +119,7 @@ async def load_recipients(_, _info, limit=50, offset=0): r = [] my_followings: List[ChatMember] = get_my_followed() if len(my_followings) < limit: - authors_by_user, authors_by_id = get_all_authors() + authors_by_user, authors_by_id = cached_authors my_followings = my_followings + list(authors_by_id.values())[offset : limit - len(my_followings)] my_followings = list(set(my_followings)) for a in my_followings: diff --git a/resolvers/search.py b/resolvers/search.py index 80abb8a..883ccab 100644 --- a/resolvers/search.py +++ b/resolvers/search.py @@ -4,7 +4,7 @@ from typing import Any, Dict, List, Union from resolvers.load import load_messages from services.auth import login_required -from services.core import get_all_authors +from services.core import cached_authors from services.rediscache import redis from services.schema import query @@ -18,7 +18,7 @@ async def search_recipients(_, info, text: str, limit: int = 50, offset: int = 0 author_id = info.context["author_id"] - authors_by_user, authors_by_id = get_all_authors() + authors_by_user, authors_by_id = cached_authors existed_chats = await redis.execute("SMEMBERS", f"/chats_by_author/{author_id}") if existed_chats: diff --git a/services/auth.py b/services/auth.py index 1340b9c..8510cf7 100644 --- a/services/auth.py +++ b/services/auth.py @@ -62,10 +62,11 @@ def login_required(f): context["user_id"] = user_id if not cached_authors: get_all_authors() - authors_by_user, authors_by_id = cached_authors - author = authors_by_user.get(user_id) - if author and "id" in author: - context["author_id"] = author["id"] + if cached_authors: + authors_by_user, authors_by_id = cached_authors + author = authors_by_user.get(user_id) + if author and "id" in author: + context["author_id"] = author["id"] return await f(*args, **kwargs) return decorated_function