diff --git a/resolvers/inbox.py b/resolvers/inbox.py index 51f727a9..16007d8a 100644 --- a/resolvers/inbox.py +++ b/resolvers/inbox.py @@ -8,7 +8,14 @@ from base.resolvers import mutation, query, subscription from services.inbox import MessageResult, MessagesStorage, ChatFollowing -async def get_unread_counter(user_slug): +async def get_unread_counter(chat_id, user_slug): + try: + return int(await redis.execute("LLEN", f"chats/{chat_id}/unread/{user_slug}")) + except Exception: + return 0 + + +async def get_total_unread_counter(user_slug): chats = await redis.execute("GET", f"chats_by_user/{user_slug}") if not chats: return 0 @@ -16,7 +23,7 @@ async def get_unread_counter(user_slug): chats = json.loads(chats) unread = 0 for chat_id in chats: - n = await redis.execute("LLEN", f"chats/{chat_id}/unread/{user_slug}") + n = await get_unread_counter(chat_id, user_slug) unread += n return unread @@ -92,6 +99,7 @@ async def user_chats(_, info): chats = list(json.loads(chats)) for c in chats: c['messages'] = await load_messages(c['id'], 50, 1) + c['unread'] = await get_unread_counter(c['id'], user.slug) return chats diff --git a/resolvers/profile.py b/resolvers/profile.py index f5814d8b..6ba21f13 100644 --- a/resolvers/profile.py +++ b/resolvers/profile.py @@ -11,7 +11,7 @@ from orm.shout import Shout from orm.topic import Topic, TopicFollower from orm.user import User, UserRole, Role, UserRating, AuthorFollower from .community import followed_communities -from .inbox import get_unread_counter +from .inbox import get_total_unread_counter from .topics import get_topic_stat from services.auth.users import UserStorage from services.zine.shoutscache import ShoutsCache @@ -20,7 +20,7 @@ from services.stat.reacted import ReactedStorage async def user_subscriptions(slug: str): return { - "unread": await get_unread_counter(slug), # unread inbox messages counter + "unread": await get_total_unread_counter(slug), # unread inbox messages counter "topics": [t.slug for t in await followed_topics(slug)], # followed topics slugs "authors": [a.slug for a in await followed_authors(slug)], # followed authors slugs "reactions": await ReactedStorage.get_shouts_by_author(slug), diff --git a/schema.graphql b/schema.graphql index 6e561b2b..d5a93add 100644 --- a/schema.graphql +++ b/schema.graphql @@ -501,4 +501,5 @@ type Chat { description: String users: [User]! messages: [Message]! + unread: Int }