load-chats-debug
This commit is contained in:
parent
8901ded662
commit
cbd77122a5
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -5,3 +5,4 @@ __pycache__
|
||||||
.vscode
|
.vscode
|
||||||
poetry.lock
|
poetry.lock
|
||||||
.venv
|
.venv
|
||||||
|
.ruff_cache
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
[0.2.20]
|
||||||
|
- added logger
|
||||||
|
- typing revision
|
||||||
|
|
||||||
[0.2.19]
|
[0.2.19]
|
||||||
- fix: stripping user_id
|
- fix: stripping user_id
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,11 @@ from services.core import CacheStorage
|
||||||
from services.rediscache import redis
|
from services.rediscache import redis
|
||||||
from services.schema import query
|
from services.schema import query
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
logger = logging.getLogger("[resolvers.load] ")
|
||||||
|
logger.setLevel(logging.DEBUG)
|
||||||
|
|
||||||
|
|
||||||
async def get_unread_counter(chat_id: str, member_id: int) -> int:
|
async def get_unread_counter(chat_id: str, member_id: int) -> int:
|
||||||
unread = await redis.execute("LLEN", f"chats/{chat_id}/unread/{member_id}")
|
unread = await redis.execute("LLEN", f"chats/{chat_id}/unread/{member_id}")
|
||||||
|
@ -61,23 +66,27 @@ async def load_chats(_, info, limit: int = 50, offset: int = 0) -> Dict[str, Uni
|
||||||
author_id = info.context["author_id"]
|
author_id = info.context["author_id"]
|
||||||
chats = []
|
chats = []
|
||||||
if author_id:
|
if author_id:
|
||||||
|
logger.debug("got author", author_id)
|
||||||
cids = await redis.execute("SMEMBERS", f"chats_by_author/{author_id}")
|
cids = await redis.execute("SMEMBERS", f"chats_by_author/{author_id}")
|
||||||
|
logger.debug("got cids", cids)
|
||||||
|
members_online = (await redis.execute("SMEMBERS", "authors-online")) or [] # to show online status
|
||||||
|
logger.debug("members online", members_online)
|
||||||
if isinstance(cids, set):
|
if isinstance(cids, set):
|
||||||
members_online = (await redis.execute("SMEMBERS", "authors-online")) or []
|
|
||||||
# TODO: add sort by chat.created_at with in-memory caching chats service
|
# TODO: add sort by chat.created_at with in-memory caching chats service
|
||||||
cids = list(cids)[offset : (offset + limit)]
|
cids = list(cids)[offset : (offset + limit)]
|
||||||
lock = asyncio.Lock()
|
lock = asyncio.Lock()
|
||||||
if len(cids) == 0:
|
if len(cids) == 0:
|
||||||
print(f"[resolvers.load] no chats for user with id={author_id}")
|
logger.debug(f"no chats for user with id={author_id}")
|
||||||
r = await create_chat(None, info, members=[2]) # member with id = 2 is discours
|
r = await create_chat(None, info, members=[2]) # member with id = 2 is discours
|
||||||
print(f"[resolvers.load] created chat: {r['chat_id']}")
|
logger.debug(f"created chat: {r['chat_id']}")
|
||||||
cids.append(r["chat"]["id"])
|
cids.append(r["chat"]["id"])
|
||||||
|
|
||||||
|
logger.debug(f"getting data for {len(cids)} user's chats")
|
||||||
for cid in cids:
|
for cid in cids:
|
||||||
async with lock:
|
async with lock:
|
||||||
chat_str = await redis.execute("GET", f"chats/{cid}")
|
chat_str = await redis.execute("GET", f"chats/{cid}")
|
||||||
if isinstance(chat_str, str):
|
if isinstance(chat_str, str):
|
||||||
print(f"[resolvers.load] redis GET by {cid}: {chat_str}")
|
logger.debug(f"redis GET by {cid}: {chat_str}")
|
||||||
c: ChatPayload = json.loads(chat_str)
|
c: ChatPayload = json.loads(chat_str)
|
||||||
c["messages"] = (await load_messages(cid, 5, 0)) or []
|
c["messages"] = (await load_messages(cid, 5, 0)) or []
|
||||||
c["unread"] = await get_unread_counter(cid, author_id)
|
c["unread"] = await get_unread_counter(cid, author_id)
|
||||||
|
@ -88,7 +97,12 @@ async def load_chats(_, info, limit: int = 50, offset: int = 0) -> Dict[str, Uni
|
||||||
if a:
|
if a:
|
||||||
a["online"] = a.get("id") in members_online
|
a["online"] = a.get("id") in members_online
|
||||||
c["members"].append(a)
|
c["members"].append(a)
|
||||||
|
else:
|
||||||
|
logger.error(f"cant find author by id {member_id}")
|
||||||
chats.append(c)
|
chats.append(c)
|
||||||
|
|
||||||
|
else:
|
||||||
|
logger.error(f"cant find chat by id {cid}")
|
||||||
return {"chats": chats, "error": None}
|
return {"chats": chats, "error": None}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,6 @@ async def check_auth(req) -> str | None:
|
||||||
user_id = ""
|
user_id = ""
|
||||||
if token:
|
if token:
|
||||||
# Logging the authentication token
|
# Logging the authentication token
|
||||||
# print(f"[services.auth] checking auth token: {token}")
|
|
||||||
query_name = "validate_jwt_token"
|
query_name = "validate_jwt_token"
|
||||||
operation = "ValidateToken"
|
operation = "ValidateToken"
|
||||||
headers = {
|
headers = {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user