From f33241b84f2173153061fcf876bf737350409d68 Mon Sep 17 00:00:00 2001 From: Untone Date: Fri, 17 Nov 2023 11:51:15 +0300 Subject: [PATCH] mutation-fix --- inbox.graphql | 27 +++++++++++++++----------- resolvers/messages.py | 44 +++++++++++++++++++++++++------------------ 2 files changed, 42 insertions(+), 29 deletions(-) diff --git a/inbox.graphql b/inbox.graphql index 478fef0..5aee52b 100644 --- a/inbox.graphql +++ b/inbox.graphql @@ -26,6 +26,13 @@ input ChatInput { description: String } +input MessageInput { + id: String! + chat_id: String! + body: String + seen: Boolean +} + type ChatResult { error: String chat: Chat @@ -39,11 +46,11 @@ type ChatResult { type Mutation { # inbox createChat(title: String, members: [Int]!): ChatResult! - updateChat(chat_id: ChatInput!): ChatResult! + updateChat(chat: ChatInput!): ChatResult! deleteChat(chat_id: String!): ChatResult! createMessage(chat_id: String!, body: String!, reply_to: Int): ChatResult! - updateMessage(chat_id: String!, message_id: Int!, body: String!): ChatResult! + updateMessage(message: MessageInput!): ChatResult! deleteMessage(chat_id: String!, message_id: Int!): ChatResult! markAsRead(chat_id: String!, message_id: Int!): ChatResult! @@ -69,27 +76,25 @@ type Query { } type Message { + id: Int! author: Int! + created_at: Int! chat_id: String! body: String! - created_at: Int! - id: Int! - reply_to: Int updated_at: Int + reply_to: Int seen: Boolean } type Chat { id: String! + created_by: Int! # member_id created_at: Int! - created_by: Int! - updated_at: Int! - title: String - description: String - users: [Int] members: [ChatMember] admins: [Int] + updated_at: Int + title: String + description: String messages: [Message] unread: Int - private: Boolean } diff --git a/resolvers/messages.py b/resolvers/messages.py index 8d30a1b..d6566eb 100644 --- a/resolvers/messages.py +++ b/resolvers/messages.py @@ -78,32 +78,40 @@ async def create_message(_, info, chat_id: str, body: str, reply_to=None): @mutation.field("updateMessage") @login_required -async def update_message(_, info, chat_id: str, message_id: int, body: str): +async def update_message(_, info, message): author_id = info.context["author_id"] + chat_id = message.get("chat_id") + chat_str = "" + if chat_id: + chat_str = await redis.execute("GET", f"chats/{chat_id}") + if not chat_str: + return {"error": "chat not exist"} - chat_str = await redis.execute("GET", f"chats/{chat_id}") - if not chat_str: - return {"error": "chat not exist"} + message_id = message.get("id") + body = message.get("body") - message = await redis.execute("GET", f"chats/{chat_id}/messages/{message_id}") - if not message: - return {"error": "message not exist"} + if message_id: + message = await redis.execute("GET", f"chats/{chat_id}/messages/{message_id}") + if not message: + return {"error": "message not exist"} - message = json.loads(message) - if message["author"] != author_id: - return {"error": "access denied"} + message = json.loads(message) + if message["author"] != author_id: + return {"error": "access denied"} - message["body"] = body - message["updated_at"] = int(datetime.now(tz=timezone.utc).timestamp()) + if body: + message["body"] = body + message["updated_at"] = int(datetime.now(tz=timezone.utc).timestamp()) - await redis.execute("SET", f"chats/{chat_id}/messages/{message_id}", json.dumps(message)) + await redis.execute("SET", f"chats/{chat_id}/messages/{message_id}", json.dumps(message)) - - # Отправка уведомления - message["chat_id"] = chat_id - await notify_message(message, "update") + # Отправка уведомления + message["chat_id"] = chat_id + await notify_message(message, "update") - return {"message": message, "error": None} + return { "message": message, "error": None } + else: + return { "message": message, "error": "cannot update, no message_id" } @mutation.field("deleteMessage")