From 3828e92c198558922b0461562f0e974fdfcc27f8 Mon Sep 17 00:00:00 2001 From: knst-kotov Date: Fri, 28 Jan 2022 15:52:14 +0300 Subject: [PATCH] get messages from redis --- resolvers/inbox.py | 48 ++++++++++++++++++++-------------------------- schema.graphql | 6 ++---- 2 files changed, 23 insertions(+), 31 deletions(-) diff --git a/resolvers/inbox.py b/resolvers/inbox.py index 6f0da3c5..086e1785 100644 --- a/resolvers/inbox.py +++ b/resolvers/inbox.py @@ -60,20 +60,25 @@ async def create_chat(_, info, description): return { "chatId" : chat_id } -@query.field("enterChat") -@login_required -async def enter_chat(_, info, chatId): - chat = await redis.execute("GET", f"chats/{chatId}") - if not chat: - return { "error" : "chat not exist" } - chat = json.loads(chat) - - message_ids = await redis.lrange(f"chats/{chatId}/message_ids", 0, 10) +async def load_messages(chatId, size, page): + message_ids = await redis.lrange(f"chats/{chatId}/message_ids", + size * (page -1), size * page - 1) messages = [] if message_ids: message_keys = [f"chats/{chatId}/messages/{id.decode('UTF-8')}" for id in message_ids] messages = await redis.mget(*message_keys) messages = [json.loads(msg) for msg in messages] + return messages + +@query.field("enterChat") +@login_required +async def enter_chat(_, info, chatId, size): + chat = await redis.execute("GET", f"chats/{chatId}") + if not chat: + return { "error" : "chat not exist" } + chat = json.loads(chat) + + messages = await load_messages(chatId, size, 1) return { "chat" : chat, @@ -112,25 +117,14 @@ async def create_message(_, info, chatId, body, replyTo = None): @query.field("getMessages") @login_required -async def get_messages(_, info, count, page): - auth = info.context["request"].auth - user_id = auth.user_id - - with local_session() as session: - messages = session.query(Message).filter(Message.author == user_id) - - return messages +async def get_messages(_, info, chatId, size, page): + chat = await redis.execute("GET", f"chats/{chatId}") + if not chat: + return { "error" : "chat not exist" } -def check_and_get_message(message_id, user_id, session) : - message = session.query(Message).filter(Message.id == message_id).first() - - if not message : - raise Exception("invalid id") - - if message.author != user_id : - raise Exception("access denied") - - return message + messages = await load_messages(chatId, size, page) + + return messages @mutation.field("updateMessage") @login_required diff --git a/schema.graphql b/schema.graphql index 71245cd3..07c06c7e 100644 --- a/schema.graphql +++ b/schema.graphql @@ -167,7 +167,8 @@ type Query { getUserRoles(slug: String!): [Role]! # messages - getMessages(count: Int = 100, page: Int = 1): [Message!]! + enterChat(chatId: String!, size: Int = 50): EnterChatResult! + getMessages(chatId: String!, size: Int!, page: Int!): [Message]! # shouts getShoutBySlug(slug: String!): Shout! @@ -192,9 +193,6 @@ type Query { # communities getCommunity(slug: String): Community! getCommunities: [Community]! - - #messages - enterChat(chatId: String!): EnterChatResult! } ############################################ Subscription