calculate totalUnreadMessages for user

This commit is contained in:
knst-kotov 2022-04-13 15:11:06 +03:00
parent 5b4cc95e87
commit c4bda0b1c3
3 changed files with 21 additions and 1 deletions

View File

@ -42,6 +42,19 @@ class MessageResult:
self.status = status self.status = status
self.message = message self.message = message
async def get_total_unread_messages_for_user(user_slug):
chats = await redis.execute("GET", f"chats_by_user/{user_slug}")
if not chats:
return 0
chats = json.loads(chats)
total = 0
for chat_id in chats:
n = await redis.execute("LLEN", f"chats/{chat_id}/unread/{user_slug}")
total += n
return total
async def add_user_to_chat(user_slug, chat_id, chat = None): async def add_user_to_chat(user_slug, chat_id, chat = None):
chats = await redis.execute("GET", f"chats_by_user/{user_slug}") chats = await redis.execute("GET", f"chats_by_user/{user_slug}")
if not chats: if not chats:

View File

@ -6,6 +6,8 @@ from orm.topic import Topic, TopicSubscription
from resolvers.base import mutation, query, subscription from resolvers.base import mutation, query, subscription
from auth.authenticate import login_required from auth.authenticate import login_required
from inbox_resolvers.inbox import get_total_unread_messages_for_user
from sqlalchemy import func, and_, desc from sqlalchemy import func, and_, desc
from sqlalchemy.orm import selectinload from sqlalchemy.orm import selectinload
import asyncio import asyncio
@ -14,7 +16,11 @@ import asyncio
@login_required @login_required
async def get_current_user(_, info): async def get_current_user(_, info):
user = info.context["request"].user user = info.context["request"].user
return { "user": user } total_unread_messages = await get_total_unread_messages_for_user(user.slug)
return {
"user": user,
"totalUnreadMessages": total_unread_messages
}
@query.field("getUsersBySlugs") @query.field("getUsersBySlugs")
async def get_users_by_slugs(_, info, slugs): async def get_users_by_slugs(_, info, slugs):

View File

@ -15,6 +15,7 @@ type AuthResult {
type UserResult { type UserResult {
error: String error: String
user: User user: User
totalUnreadMessages: Int
} }
input ShoutInput { input ShoutInput {